在 SQL 中使用多个 NOT IN 语句

Using multiple NOT IN Statements with SQL

我在存储过程中有一个语句,在运行错误检查之前使用 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 个可能的值。我尝试过的嵌套 none 适用于这种情况。我错过了什么?我应该采用完全不同的方法吗?

_______________________Edit_________________________________________________ 来自@briangerhards 的@Bjones 的 post 基本上解决了我的问题。当我回头查看 table 的创建方式时,我注意到 IN 语句需要单引号。除此之外,来自@Briangerhards 的 post 提示我查看我现有的过滤器,我意识到第二个 NOT IN 语句需要包含在第一个 AND 语句中,因为过滤器的关系才能正常工作数据。如果我自己首先看到后者,我可能从来没有 posted 因为我最初尝试过单引号。当过滤器失败时,我认为它们('')有问题而不是我的结构。我想这应该是一个不要恐慌的教训。大声笑再次感谢大家的帮助。

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'
       )'

我看到这里的一些项目可以根据逻辑进行更正。见附加括号

这个有用吗?

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

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

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

SELECT * FROM TableName

EXCEPT

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