在SQL中使用多个NOT IN语句

问题描述 投票:0回答:3

我在存储过程中有一个语句,它在运行错误检查之前使用NOT IN语句过滤掉某些记录。

WHERE Column1 NOT IN (X,Y)

最近引入了一个新变量,我需要在其中一个错误检查语句之前过滤掉。我想写的是。

WHERE Column1 NOT IN (X,Y) OR Column2 NOT IN (UD,CD)

这不会起作用,因为我无法使第二个NOT IN识别出WHERE。 UD,CD继续作为列而不是列中的值。仅供参考,此列中可能包含7个可能的值。并且我尝试过的任何嵌套都不适合这种情况。我错过了什么?我应该接近这个完全不同吗?

_______________________Edit_________________________________________________来自@briangerhards的@Bjones的帖子基本上解决了我的问题。一旦我回过头来看看表是如何创建的,我注意到IN语句需要单引号。除此之外,来自@Briangerhards的帖子促使我查看我现有的过滤器,并且我意识到第二个NOT IN语句需要包含在第一个AND语句中,以便过滤器由于数据的关系而正常工作。如果我第一次看到后者,我可能从来没有发过,因为我最初尝试过单引号。当过滤器失败时,我认为他们('')有错,而不是我的结构。我想这应该是一个不要惊慌的教训。大声笑再次感谢大家的帮助。

sql-server-2008-r2 notin
3个回答
0
投票
UPDATE Table1 
SET Column3 = '06,' 
WHERE Column1 NOT IN (X,Y) 
   OR (
       Column2 NOT IN (UD,CD) 
       AND (Column4 = 'Y' AND Column5 = '000000')
       )
   OR (
       Column4 = 'Y' AND Column2= 'XX'
       )'

我在这里看到一些可以根据逻辑进行修正的项目。请参阅其他括号


0
投票

这有用吗?

WHERE Column1 NOT IN (X,Y) AND Column2 NOT IN ('UD','CD')

注意单引号的变化以及AND而不是OR。


0
投票

尝试使用'Except'删除行而不是组合两个NOT运算符:

SELECT * FROM TableName

EXCEPT

SELECT * FROM TableName WHERE Column1 IN (X,Y) OR Column2 IN (UD,CD)
© www.soinside.com 2019 - 2024. All rights reserved.