You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL使用CASE做WHERE条件筛选报语法错误如何解决

错误原因
  • CASE是表达式不是流程控制语句,在WHERE子句中使用时,THEN/ELSE分支只能返回单个标量值(布尔值、数字、字符串等),不能返回嵌套SELECT *查询得到的多行多列结果集。你当前写法中两个分支都嵌套了查同一张表的全列子查询,完全不符合MySQL语法规则,解析到子查询闭合括号时就会抛出语法错误。
  • 逻辑存在冗余:外层查询已经在遍历product_variants表的每一行做判断,不需要重复嵌套子查询查同一张表,这种写法就算能正常执行,也会产生严重的性能损耗。
正确实现方案

你的需求是逐行做判断:对每一条商品记录,如果折扣价大于0,就筛选折扣价不低于60的记录;如果折扣价不大于0,就筛选原价不低于60的记录。不需要嵌套子查询,直接用布尔逻辑拼接即可,执行效率更高:

SELECT * FROM `product_variants` 
WHERE 
  (`discount_price` > 0 AND `discount_price` >= 60)
  OR 
  (`discount_price` <= 0 AND `price` >= 60);

如果你偏向使用CASE写法,只需要让CASE分支返回当前行的判断结果即可,不要嵌套子查询:

SELECT * FROM `product_variants` 
WHERE 
  CASE 
    WHEN `discount_price` > 0 THEN `discount_price` >= 60
    ELSE `price` >= 60
  END;

内容的提问来源于stack exchange,提问作者twan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 22:06:22