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