【问题标题】:Excluding rows based on criteria SQL根据条件 SQL 排除行
【发布时间】:2026-01-15 10:50:01
【问题描述】:

我正在寻求一些帮助,以了解如何删除第 1 列 = a 如果第 2 列也 = a 的所有行。

这很难描述,所以我将在下面使用一个示例。

1    2
a    b
a    a
a    null
b    c
b    e
c    c
d    f
d    a
d    e

上表是当前存在的,我正在寻找给出以下结果的查询

1    2
b    c
b    e
d    f
d    a
d    e

如果其中任何一个匹配,即列 1 = a 列 2 = a,则应删除列 1 = a 的所有行。有没有办法做到这一点?

TIA

【问题讨论】:

  • 我有点困惑为什么“c”不在结果集中。
  • 因为 c = c 我试图排除它们匹配的所有行
  • @BeckyPurland 第一行 a b 也应该出现在结果集中。
  • @SurajKumar 不,不应该,如果第 2 列与第 1 列中的任何一个匹配,我想排除第 1 列 = a 的所有行。请再读一遍,这很难描述

标签: sql sql-server sql-server-2017


【解决方案1】:

您似乎想要col1 没有col1 = col2 的行。如果这是正确的解释,您可以使用子查询:

select t.*
from t
where not exists (select 1
                  from t t2
                  where t2.col1 = t.col1 and
                        t2.col1 = t2.col2
                 );

【讨论】:

    【解决方案2】:

    您可以使用<> (not) 运算符尝试以下查询。

    Select * from Yourtable where [Col1] <> [Col2] and Col1 <> 'a'
    

    这是现场db<>fiddle 演示。

    【讨论】:

    • 这仅排除匹配的,这不是我要求的
    • 如果其中任何一个匹配,即第 1 列 = a 列 2 = a,则应删除第 1 列 = a 的所有行。
    • @BeckyPurland 现在检查修改后的查询。