在SQL中使用多个NOT IN语句

时间:2015-07-22 19:16:42

标签: sql-server-2008-r2 notin

我在存储过程中有一个语句,它在运行错误检查之前使用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语句中,以便过滤器由于数据的关系而正常工作。如果我第一次看到后者,我可能从来没有发过,因为我最初尝试过单引号。当过滤器失败时,我认为他们('')有错,而不是我的结构。我想这应该是一个不要惊慌的教训。大声笑再次感谢大家的帮助。

3 个答案:

答案 0 :(得分: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'
       )'

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

答案 1 :(得分:0)

这有用吗?

cbind.data.frame(Var1=subtype , Var2=c(t(as.matrix(expand.grid(height,height)))))

#   Var1 Var2
# 1   ar    0
# 2  sub    0
# 3   ar    1
# 4  sub    0
# 5   ar    0
# 6  sub    1
# 7   ar    1
# 8  sub    1

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

答案 2 :(得分:0)

尝试使用“除”来删除行,而不是组合两个NOT运算符:

SELECT * FROM TableName

EXCEPT

SELECT * FROM TableName WHERE Column1 IN (X,Y) OR Column2 IN (UD,CD)