sql - 非常基本的 IF EXISTS 语句不起作用

标签 sql mariadb mariadb-10.3

我真的不明白为什么我的陈述:

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 子句放入 UPDATE 语句的 WHERE 子句中会导致许多徒劳的查询和计算.

最佳答案

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

相反,只需使用:

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

如果表中存在 id 168,则返回所有个人。

关于sql - 非常基本的 IF EXISTS 语句不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64836645/

相关文章:

azure - 无法在 Azure 上启动 mariadb 容器,因为 mysql 用户似乎无权访问该卷

mysql - 在一次查询中获取忽略某一状态的供应商的取消率

mysql - 从一个表中选择,并从另外两个表中进行计数

Mysql员工休息时间历史与时差

SQL问题连词

sql - 显示来自不同表的数据,并以摘要形式显示详细信息

sql - PostgreSQL:使用 psql 命令行实用程序时 Windows 上的编码问题

sql - 有人能给我解释一下这个 SQL 查询吗?我不明白存储桶在做什么,或者存储桶或位掩码是什么?