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

SQL含IN的条件WHERE子句语法错误及正确写法咨询

正确的SQL写法解决你的筛选需求

嘿,我来帮你搞定这个SQL查询的问题!首先得说清楚:你之前在WHERE子句里用IF语句报错,是因为SQL的WHERE子句不支持这种流程控制式的IF语法——WHERE需要的是布尔逻辑表达式来判断哪些行应该被返回,而不是像编程语言里的条件分支语句。

你转向用逻辑与/或组合的思路完全正确,只需要把没写完的部分补全就行。完整的正确SQL应该是这样的:

SELECT * 
FROM transactionDetails 
WHERE 
    OrderID IN (400376, 400379) 
    AND (
        (TransactionDate <> ProcessingDate AND TransactionId IN (2, 3, 9, 14, 15))
        OR 
        (TransactionDate = ProcessingDate AND TransactionId IN (2, 3, 9))
    );

逻辑拆解:

  • 首先过滤出OrderID是400376或400379的所有行;
  • 然后对这些行做分支判断:
    • 如果TransactionDate和ProcessingDate不相等,只保留TransactionId在(2,3,9,14,15)里的行;
    • 如果两个日期相等,就只保留TransactionId在(2,3,9)里的行。

如果你觉得用CASE WHEN可读性更好,也可以写成这样(逻辑完全等价,注意部分数据库可能需要微调语法):

SELECT * 
FROM transactionDetails 
WHERE 
    OrderID IN (400376, 400379) 
    AND TransactionId IN (
        CASE 
            WHEN TransactionDate <> ProcessingDate THEN (2, 3, 9, 14, 15)
            ELSE (2, 3, 9)
        END
    );

不过第一种布尔表达式的写法兼容性更强,更推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:30:01