sql - 非常基本的 IF EXISTS 语句不起作用
问题描述
我真的不明白为什么我的说法:
IF EXISTS (SELECT * FROM people WHERE ID = 168)
THEN SELECT * FROM people
END IF;
正在返回此错误:
Unknown statement type. (near "IF EXISTS" at position 0)
我正在使用 MariaDB 10.3。有任何想法吗?
附加信息
这当然是一个简化的例子。我想做的是,具体来说:
IF EXISTS (SELECT * FROM people WHERE ID = 168)
THEN UPDATE people SET calculated_value = complex_queries_and_calculations
WHERE ID = 168
..,因此如果该记录包含给定数据,则更新给定记录的字段,否则什么也不做。要生成将用于更新的数据,我需要查询其他表的值并进行一些计算。如果实际上没有什么可更新的,我想避免这些查询+计算。在这种情况下,什么也不做。因此,我猜想在语句的子句中EXIST
放置一个WHERE
子句UPDATE
会导致许多查询和计算都是徒劳的。
解决方案
MySQL 和 MariaDB 只允许IF
在编程块中使用语句——存储函数、过程和触发器。
相反,只需使用:
select p.*
from people p
where exists (select 1 from people p2 where p2.id = 168);
如果168 在表中,这将返回所有人。id
推荐阅读
- android - 在 Android API 29 和 API 30 中创建到 /sdcard/Download 文件夹下的文件夹
- java - 3边三角形面积计算器
- python - numpy einsum 折叠除第一维之外的所有内容
- cdn - 如何仔细检查资源是否实际上是通过站点的 CDN 服务提供的?
- c++ - QtConcurrent::run 作为非静态方法
- api - 如何在从 API 端点获取数据到谷歌表格时处理谷歌应用脚本 6 分钟的执行时间限制?
- xamarin.ios - Visual Studio 2019 要求确认 Apple 的 Apple ID 和隐私声明
- mysql - mysql 数据源抛出无法创建 PoolableConnectionFactory 异常,但旧的 jdbc 连接方法仍然有效
- node.js - 如何在反应中从firebase调用空集合或文档?
- r - 一个 R 函数是否可以像 [] 中那样不返回任何内容?