MySQL SELECT中IF语句执行多个表达式的实现方法
在MySQL的SELECT语句IF分支中执行多个表达式的方法
当然可以实现,但你不能用分号分隔多个表达式——MySQL的IF函数每个分支只能接受单个表达式。不过可以用逗号运算符把多个操作连起来,它会按顺序执行所有表达式,最后一个表达式的结果会作为整个分支的返回值。
修改后的示例代码如下:
SELECT t.id, IF ( t.id > 10, (@var1 := t.id, @var2 := t.title), -- 用逗号分隔多个赋值操作 t.title ) AS result_col FROM `table` t;
补充说明:
- 逗号运算符会从左到右依次执行每个表达式,所以
@var1和@var2都会被正确赋值,最终返回@var2 := t.title的结果(也就是t.title的值),和你原代码里的分支逻辑一致。 - 如果不需要返回某个具体值,也可以把赋值操作放在SELECT的独立列中,用IF控制是否执行:
SELECT t.id, IF(t.id > 10, @var1 := t.id, NULL), IF(t.id > 10, @var2 := t.title, NULL), IF(t.id > 10, t.title, t.title) AS result_col FROM `table` t;
这种写法更直观,但会多返回两列(不需要的话可以不显示)。
- 也可以用
CASE WHEN替代IF,逻辑完全一致,同样支持逗号运算符:
SELECT t.id, CASE WHEN t.id > 10 THEN (@var1 := t.id, @var2 := t.title) ELSE t.title END AS result_col FROM `table` t;
内容的提问来源于stack exchange,提问作者Amirhossein Aliakbarpour
相关产品推荐
相关产品推荐

