在MySQL中,我想通过IF-THEN语句比较用户定义的变量:

SET @num = 10;

IF @num > 7 then
    select * from person;
ELSE
    select name from person;
END IF;

我怎么能这么做呢? 目前,我在If@num>7附近收到一个错误.

推荐答案

Compound statements个LIKE IF/THEN/ELSE仅在MySQL的存储 routine 语言中受支持.

这是手册中的内容:

本节介绍Begin...的语法.End复合语句和可在存储程序体中使用的其他语句:存储过程和函数、触发器和事件.

通常,如果您需要有条件地运行SQL查询,并且没有使用存储 routine ,则可以将条件逻辑放入一些客户端应用程序编程语言中,例如Java、Python、Go、PHP或您最喜欢的任何语言.

从最早的时候起,SQL就打算与其他编程语言结合使用.

如果您确实不能在客户端应用程序中编写代码,这里有一个解决方法,可以在SQL脚本中运行您的示例:

SET @num = 10;

SET @sql = IF(@num > 7,
              'select * from person',
              'select name from person');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

如果您有更复杂的条件代码,则此解决方法可能不切实际.

Mysql相关问答推荐

创建从表中筛选数据的过程时出错

AWS RDS上的MySQL复制错误:超级权限或REPLICATION_SLAVE_ADMIN权限的访问被拒绝

一次又一次地删除事件行

在联合查询中使用GROUP BY和ORDER BY

找出同一表中列A中的每个值在列B中出现的次数

如何跨多个产品查找相同时间范围的数据集

JPA对具有动态键和动态值的JSON列的原生查询

表列中的SQL SUM MENY值记录单个查询

在 .NET 6 中使用 Dapper Framework 未能成功连接到 MySql

根据时间戳分组删除

使用Workbench时如何添加mysqldump配置标志

时间戳上滚动窗口的 SQL 计数不同

关于设置为 NOT NULL 时的 CHAR 默认值

仅当其他行相等时才 Select 行值

MYSQL除以零警告,奇怪的行为

如何在 Mysql 中创建复合外键

如何在 SQL 中的一行中查找最小值和最大值?

索引和多列主键

与 MySql 的连接正在自动中止.如何正确配置Connector/J?

如果另一列为空,则 Select 一列