为何OR条件会使SQL查询的WHERE筛选规则失效?
修正后的SQL语句及问题解析
你的SQL存在两处语法错误,同时逻辑括号的使用不符合需求:
语法错误:
WHERE子句中AND opened_at >= '2022 3-1- 00:00:00')多了一个多余的右括号,需删除OR C.dv_subcategory ='Research;中的字符串未闭合,应改为'Research'
逻辑优先级问题:
你需要所有结果都满足dv_assignment_group IN ('Support', 'Payment'),在此基础上再筛选满足日期条件或子分类为'Research'的数据。因此需将日期条件和OR子句用括号包裹,确保dv_assignment_group的筛选作用于所有结果。
修正后的SQL如下:
SELECT TOP 50 C.task , C.dv_state , C.opened_at , C.dv_assignment_group , C.dv_subcategory FROM [dbo].[sn_customer_task] C WITH (NOLOCK) WHERE C.dv_assignment_group IN ('Support', 'Payment') AND (opened_at >= '2022-03-01 00:00:00' OR C.dv_subcategory = 'Research')
另外建议将日期格式改为标准的'YYYY-MM-DD HH:MM:SS'形式,避免数据库解析日期时出现异常。
内容的提问来源于stack exchange,提问作者user21265764
相关产品推荐
相关产品推荐

