如何在TSQL中编写multple Not equal AND子句?
我正在使用tsql编写查询,我的where子句似乎返回了太多的结果。出于某种原因,它似乎把我的不平等和从句当作一个或从句如何在TSQL中编写multple Not equal AND子句?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在使用tsql编写查询,我的where子句似乎返回了太多的结果。出于某种原因,它似乎把我的不平等和从句当作一个或从句 SELECT * FROM [dbo].TestTable WHERE ([SomeID] <> 0) AND ([BlahID] <> 0) AND ([TestID] <> 0) AND ([AnotherID] <> 0) ORDER By ID 我想要它归还什么 ID
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
4 0 1 4 0
5 6 1 4 3
回报
ID SomeID BlahID TestID AnotherID
5 6 1 4 3
它始终不返回任何列中有零的行
不是所有这些列
这正是您的查询的全部内容。它返回行,在您列出的任何列中都没有0
这是因为,如果其中任何一个和部分被评估为false,则整个条件也将为false。因此,如果TestID=0,则整个WHERE子句为false,并且不返回该行
要获取至少其中一列具有非零值的行,请使用或。至少对我来说更容易阅读 从未拥有且id=0的记录
SELECT *
FROM [dbo].TestTable
WHERE 0 NOT IN ([SomeID],[BlahID],[TestID],[AnotherID])
至少有一个id为0的记录
我需要它只返回所有四列都不相等的行
零现在它正在删除任何列相等的行
归零
根据您的措辞和修改后的更新,您想要的是使用或而不是和。不确定链接是否有效,但是。使用
SELECT * FROM [dbo].TestTable WHERE [BlahID] <> 0
问题不在于你的查询,而在于你期望的结果。表中的每一行至少有一列中有一个非零值,因此查询将返回整个表。仅根据示例代码,不应出现这种情况。我想我们需要看看真正的代码和一个有问题的返回值的示例。查询返回的行数是多于您想要的还是少于您想要的?它返回的行数少于预期的行数。您能显示查询返回的行吗?请阅读您编写的内容。我需要它只返回四列都不等于零的行。。然后看看你想要的输出。与您刚才要求的相反,您需要4个值中任何一个都不等于0的行。OP说他的查询返回的结果太多,并且似乎将and视为OR,不确定您的答案如何解决…@EkoostikMartin公平地说,OP最初的问题完全不明确。它始终不返回任何一列中有零的行[并非所有列],在他编辑添加示例后,似乎您回答正确,不知道你到底是怎么想出来的,考虑到他在一开始的陈述就否定了他在最后一句话中所说的话……答案的顶部引用了它,但你刚才引用的恰恰相反。你当然是对的,因为他的预期结果清楚地表明他用完全错误的方式表达了他想要的东西。是的,我想他可能想要,但我在等待澄清。
SELECT * FROM TestTable
WHERE EXISTS (
SELECT 1
FROM (VALUES(SomeID),(BlahID),(TestID),(AnotherID)) t(id)
WHERE id <> 0
)
SELECT * FROM [dbo].TestTable WHERE [BlahID] <> 0