首页 > 解决方案 > 非常基本的 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会导致许多查询和计算都是徒劳的。

标签: sqlmariadbmariadb-10.3

解决方案


MySQL 和 MariaDB 只允许IF在编程块中使用语句——存储函数、过程和触发器。

相反,只需使用:

select p.*
from people p
where exists (select 1 from people p2 where p2.id = 168);

如果168 在表中,这将返回所有人。id


推荐阅读