SQL条件判断问题:如何判断指定变量值是否存在于表中并执行对应操作
MySQL条件判断逻辑修正
原代码问题分析
你的原写法无法正常工作,原因有两点:
- 子查询
SELECT distinct(1) FROM list_of_values WHERE ...如果有匹配行,会返回包含1的结果集;无匹配时返回空结果集,而非NULL值。(SELECT ...) IS NULL无法正确判断空结果集,导致条件永远不成立,只会执行ELSE分支。 - 变量名存在拼写错误:
@decision_matirx应为@decision_matrix。
修正后的两种可行写法
方法1:使用NOT EXISTS(性能更优)
IF NOT EXISTS ( SELECT 1 FROM list_of_values WHERE components IN (@first, @second, @third) ) THEN SET @decision_matrix = "DO FIRST_ACTION"; ELSE SET @decision_matrix = "DO SECOND_ACTION"; END IF;
EXISTS会检查子查询是否返回至少一行数据:
- 当三个值全部不存在时,子查询无返回行,
NOT EXISTS为真,执行FIRST_ACTION; - 只要有一个值存在,子查询返回行,
NOT EXISTS为假,执行SECOND_ACTION。
方法2:使用COUNT(*)统计匹配行数
IF ( SELECT COUNT(*) FROM list_of_values WHERE components IN (@first, @second, @third) ) = 0 THEN SET @decision_matrix = "DO FIRST_ACTION"; ELSE SET @decision_matrix = "DO SECOND_ACTION"; END IF;
通过统计匹配三个值的行数:
- 行数为
0意味着三个值都不存在,执行FIRST_ACTION; - 行数大于
0则说明至少有一个值存在,执行SECOND_ACTION。
内容的提问来源于stack exchange,提问作者Cindy Burker
相关产品推荐
相关产品推荐

