我使用tsql编写查询,而我的where子句似乎返回了太多结果。它出于某种原因似乎将我的Not equal AND Clause视为OR子句。
SELECT *
FROM [dbo].TestTable
WHERE
([SomeID] <> 0)
AND
([BlahID] <> 0)
AND
([TestID] <> 0)
AND
([AnotherID] <> 0)
ORDER By ID
我需要它只返回所有四列不等于零的行。现在它正在删除任何列等于零的行。
我的表:
ID SomeID BlahID TestID AnotherID
1 0 1 4 0
2 0 4 4 8
3 0 0 4 0
4 0 1 4 0
5 6 1 4 3
我希望它返回
ID SomeID BlahID TestID AnotherID
1 0 1 4 0
2 0 4 4 8
4 0 1 4 0
5 6 1 4 3
它返回什么
ID SomeID BlahID TestID AnotherID
5 6 1 4 3
答案 0 :(得分:2)
它不会返回任何这些列中任何一个零的行 并非所有这些列
这正是您的查询的全部内容。它返回行,在您列出的任何列中都没有0
。
这是因为如果任何AND
部分被评估为false
,则整个条件也是false
。如果是,例如TestID = 0
,整个WHERE
子句为false
,并且未返回该行。
要获取其中至少有一列具有非零值的行,请使用OR
。
答案 1 :(得分:0)
更容易阅读(至少对我而言)
从未有过的记录和id = 0
SELECT *
FROM [dbo].TestTable
WHERE 0 NOT IN ([SomeID],[BlahID],[TestID],[AnotherID])
至少有一个ID&lt;&gt;的记录0
SELECT * FROM TestTable
WHERE EXISTS (
SELECT 1
FROM (VALUES(SomeID),(BlahID),(TestID),(AnotherID)) t(id)
WHERE id <> 0
)
答案 2 :(得分:0)
我需要它只返回所有四列不相等的行 零。现在它正在删除任何列相等的行 为零。
根据您的措辞和修订更新,您希望使用OR
代替AND
。不确定该链接是否有效,但you can check out this SQL Fiddle。
答案 3 :(得分:0)
使用
SELECT * FROM [dbo].TestTable WHERE [BlahID] <> 0
问题不在于您的查询,而是您期望的结果。表中的每一行在至少一列中都有一个非零值,因此查询返回整个表。