在 SQL 中使用多个 NOT IN 语句

Posted

技术标签:

【中文标题】在 SQL 中使用多个 NOT IN 语句【英文标题】:Using multiple NOT IN Statements with SQL 【发布时间】:2015-07-22 19:16:42 【问题描述】:

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

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

【问题讨论】:

您能否提供更多详细信息来说明您尝试过的内容以及为什么说它无法识别 WHERE?这看起来应该可以正常工作。 UD 是变量还是硬编码值?您能否提供整个 SQL(当然带有掩码值)。或提供sqlfiddle.com 示例。 尝试使用( 括号) 对使用ORAND 条件组合的条件进行分组。如:WHERE condition1=1 AND condition2=2 AND (condition3=3 or condition3=3.5)。在此示例中,您将按预期获得所有行。删除( 括号),你会得到与预期不同的东西。 @BrianGerhards 是的,我永远不知道在这些东西中提供多少 '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')' 'UD,CD' 作为列而不是列中的值继续拉动。此列中有 7 个可能的值。 【参考方案1】:

这行得通吗?

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

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

【讨论】:

【参考方案2】:
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'
       )'

我在这里看到了一些可以根据逻辑进行更正的项目。查看额外的括号

【讨论】:

好的,我试过了,但还是不行。我在想问题可能出在我的桌子上;因为我什至无法针对该列运行简单的 SELECT、WHERE、IN 语句。那我就从这个角度来看。非常感谢您的帮助!【参考方案3】:

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

SELECT * FROM TableName

EXCEPT

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

【讨论】:

以上是关于在 SQL 中使用多个 NOT IN 语句的主要内容,如果未能解决你的问题,请参考以下文章

sql 在SQL查询中使用Rank

在deiphi中如何使用sql脚本

在 sql server 中,使用整数变量构建动态 sql

在 linux 中使用 sqlplus 部署 pl sql .sql 脚本

sql 在 spark sql 数据帧查询中使用分区

sql 在T-SQL中使用Cursor