如何修正SQL查询:排除指定列表且6月创建的记录
修正SQL查询以保留符合条件的记录
你的原查询逻辑错误在于用AND同时限制了“日期不在6月”和“LIST不在prop1/2/3”,这会误删LIST属于prop1/2/3但日期不在6月的记录。我们需要排除的是同时满足“LIST为prop1/2/3”和“创建日期在2024年6月”的记录,因此可以通过以下两种方式修正:
写法一:直接取反组合条件
用NOT包裹需要排除的组合条件,逻辑更直观:
SELECT * FROM table WHERE NOT ( `LIST` IN ('prop1','prop2','prop3') AND `created_date` BETWEEN '2024-06-01' AND '2024-06-30' )
写法二:利用德摩根定律转换逻辑
将NOT (A AND B)等价转换为NOT A OR NOT B,效果完全一致:
SELECT * FROM table WHERE `LIST` NOT IN ('prop1','prop2','prop3') OR `created_date` NOT BETWEEN '2024-06-01' AND '2024-06-30'
验证结果
针对你的测试数据:
- email1、email2、email4:同时满足LIST在目标集合且日期在6月 → 被排除
- email3:LIST在目标集合但日期不在6月 → 被保留
完全符合你的期望输出。
内容的提问来源于stack exchange,提问作者John Beasley
相关产品推荐
相关产品推荐

