Deo*_*eon 6 select where sql-server-2008
我坐在逻辑问题上,我只是越来越困惑自己.
示例表
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 | NULL | NULL
7 | 20 | 文字| 0 | 1 | 空值
我希望选择custID = 20的所有任务并确认= 1.如果任务被取消= 1或已完成= 1,则不要返回记录.
在这种情况下,返回的行将是1和6.
我到目前为止的询问是
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)
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
pax*_*blo 15
您可以将其简化为:
SELECT * FROM table1
WHERE CustID = 20
AND Confirmed = 1
AND (Cancelled <> 1 OR Cancelled IS NULL)
AND (Completed <> 1 OR Completed IS NULL)
Run Code Online (Sandbox Code Playgroud)
在将实际值与NULL进行比较时,您必须小心(并且非常明确),因为均衡和不等式都排除它们.