Sql server 2008 带有多个AND和OR的SQL Select
我坐在一个逻辑问题,我只是越来越困惑自己 示例表 ID |客户ID |任务|确认|取消|完成 1 | 20 |文本| 1 | 0 | 0 2 | 20 |文本| 1 | 1 | 0 3 | 20 |文本| 1 | 0 | 1 4 | 17 |文本| 0 | 1 | 0 5 | 17 |文本| 1 | 0 | 0 6 | 20 |文本| 1 |空|空 7 | 20 |文本| 0 | 1 |空 我希望选择custID=20且已确认=1的所有任务。如果任务取消=1或完成=1,则不要返回记录 在本例中,返回的行是1和6 到目前为止,我的问题是Sql server 2008 带有多个AND和OR的SQL Select,sql-server-2008,select,where,Sql Server 2008,Select,Where,我坐在一个逻辑问题,我只是越来越困惑自己 示例表 ID |客户ID |任务|确认|取消|完成 1 | 20 |文本| 1 | 0 | 0 2 | 20 |文本| 1 | 1 | 0 3 | 20 |文本| 1 | 0 | 1 4 | 17 |文本| 0 | 1 | 0 5 | 17 |文本| 1 | 0 | 0 6 | 20 |文本| 1 |空|空 7 | 20 |文本| 0 | 1 |空 我希望选择custID=20且已确认=1的所有任务。如果任务取消=1或完成=1,则不要返回记录 在本例中,
SELECT *
FROM table1
WHERE
(CustID = 20 AND Confirmed = 1 AND Cancelled <> 1 AND Completed <> 1) OR
(CustID = 20 AND Confirmed = 1 AND Cancelled = 1 AND Completed <> 1) OR
(CustID = 20 AND Confirmed = 1 AND Cancelled <> 1 AND Completed = 1)
非常感谢您的帮助。您可以将其简化为:
SELECT * FROM table1
WHERE CustID = 20
AND Confirmed = 1
AND (Cancelled <> 1 OR Cancelled IS NULL)
AND (Completed <> 1 OR Completed IS NULL)
在比较实值和空值时,您必须小心且非常明确,因为等式和不等式都排除了它们。也可以,只需要像上面的解决方案一样包括空值检查,谢谢!
SELECT *
FROM table1
WHERE
CustID = 20 AND Confirmed = 1 AND NOT (Cancelled = 1 OR Completed = 1)
SELECT * FROM thk_basvuru WHERE thk_status in (8,23,33) or thk_olo_status not in (4,6,9,11,12)