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

SQL查询中日期与折扣类型过滤条件不生效问题咨询

问题排查与解决方案

嘿,我一眼就发现你的SQL过滤失效的问题所在了——WHERE子句的逻辑运算符使用错误,导致条件完全不符合你的预期。

问题根源分析

你的原SQL里的OR写法犯了两个关键错误:

  • 逻辑优先级问题:SQL中AND的优先级远高于OR,所以你的条件会被数据库解析成这样:
    (evenementen.evSpeeldatum >= '2018-01-24' AND tickets.tiPrijstype = 2) 
    OR 3 OR 4 OR 5 OR 6 OR 66 OR 67
    
    而单独的数字(比如3)在布尔判断中会被视为TRUE(非零值都等价于真),这就导致整个WHERE条件几乎永远为真,自然起不到过滤作用。
  • OR的语法错误:你写OR 3的方式是错的,正确的写法应该是OR tickets.tiPrijstype = 3——你需要明确判断字段值,而不是直接放一个数字。

修正后的两种写法

写法1:使用IN子句(推荐,更简洁易读)

IN子句专门用来判断字段值是否在指定列表中,完美匹配你的需求:

SELECT 
*
FROM
tickets
    JOIN
evenementen ON tickets.fk_tiEvenementID = evenementen.idEvenement
WHERE
evenementen.evSpeeldatum >= '2018-01-24'
    AND tickets.tiPrijstype IN (2, 3, 4, 5, 6, 66, 67);

写法2:用括号包裹OR条件(明确逻辑分组)

如果坚持用OR,必须用括号把所有折扣类型的判断括起来,确保它和日期条件是同时满足的关系:

SELECT 
*
FROM
tickets
    JOIN
evenementen ON tickets.fk_tiEvenementID = evenementen.idEvenement
WHERE
evenementen.evSpeeldatum >= '2018-01-24'
    AND (tickets.tiPrijstype = 2
         OR tickets.tiPrijstype = 3
         OR tickets.tiPrijstype = 4
         OR tickets.tiPrijstype = 5
         OR tickets.tiPrijstype = 6
         OR tickets.tiPrijstype = 66
         OR tickets.tiPrijstype = 67);

这两种写法都会让数据库正确执行你的过滤逻辑:只有活动日期在2018-01-24及之后,且折扣类型是你指定的那些值的记录,才会被查询出来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:12:16