【问题标题】:SQL Specify 2 different conditions for 2 different columns in where clause with both having to be trueSQL在where子句中为2个不同的列指定2个不同的条件,两者都必须为真
【发布时间】:2012-04-17 15:55:40
【问题描述】:

我如何编写一个 sql 查询来只从表中返回行

例如列 A 不为空且列 B 不为 0

我的写作方式是:

where A is not null AND B !=0 

但问题是查询结果也消除了只有一个条件为真的行,例如列 a 为空,但列 b 不为 0,反之亦然

我需要查询只消除(不返回)我的 where 子句的两个条件都满足的行。

我只希望我从查询中获得的结果是表中的行,其中列 A 不是 NULL,列 B 不是 = 0,但我需要满足两个条件,而不仅仅是其中一个

【问题讨论】:

  • @armit Bhargave 如果只有一个条件为真,我不希望因为我的 where 子句而删除任何行。如果两个条件都为真(对于表的特定行),我只希望不返回该行。我的记录很少,因为只满足 1 个条件的行也没有被返回
  • 请提供示例数据和所需的输出。

标签: sql-server-2008 tsql where-clause


【解决方案1】:

如果我理解正确,您正在寻找:

where A is not null AND B <> 0  

如果您的 where 子句实际上更复杂(例如,其中还有一个 OR),则在上面加上括号,例如:

where (A is not null AND B <> 0) OR ...

【讨论】:

  • 我认为应该是 OR B = 0
  • 我只希望我从查询中获得的结果是表中的行,其中列 A 不是 NULL,列 B 不是 = 0,但我需要满足两个条件,而不仅仅是其中一个
【解决方案2】:

我需要查询... 返回 BOTH 所在的行 满足我的 where 子句的条件。

听起来你想否定 WHERE 子句。像这样:

WHERE NOT (A IS NOT NULL AND B !=0)

这可以在没有双重否定的情况下重写:

WHERE (A IS NULL OR B = 0 OR B IS NULL)

【讨论】:

  • 我最终不得不按照你的建议使用 WHERE NOT 子句,但我不希望我的结果包含 A 为空且 B = 0 的任何行,所以我不得不使用 WHERE NOT(A为空且 B=0)
【解决方案3】:

有人在此处发布了此答案,但随后他们将其删除(不知道为什么?)但他们的答案奏效了。

WHERE NOT(A is null AND B=0)

我尝试过使用

where A is not null AND B <> 0   

where (A is not null AND B <> 0) 

但是即使只满足其中一个条件也会触发 where 子句,我需要仅在两个条件都满足时才触发它。

同样,我的问题的答案是使用下面的代码。

WHERE NOT(A is null AND B=0)

谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 2021-05-13
    相关资源
    最近更新 更多