需要从不满足以下条件的表中检索行 A = B 列和 B 列 = A 列

Posted

技术标签:

【中文标题】需要从不满足以下条件的表中检索行 A = B 列和 B 列 = A 列【英文标题】:Need to retrieve rows from table where the following condition was not satisfied column A = column B and column B = column A 【发布时间】:2014-12-30 19:58:15 【问题描述】:

我希望我能够解释我在寻找什么。我有一张如下表:

ID | Column A| Column B
1  | 1234    | 9876    
2  | 1234    | 8765    
3  | 9876    | 1234    
4  | 2345    | 3456    
5  | 3456    | 2345

规则是,对于 A 列 = 值 A 和 B 列 = 值 B 的每个值,我需要有一行,其中 A 列 = 值 B 和 B 列 = 值 A。

在这里,我有满足这个条件的 ID = 1、3、4 和 5。

我需要拉 ID = 2,因为这不符合规则。

此查询是否适用于上述条件:

select * from TABLE1 T1 where T1.ID not in (select ID from TABLE1 
where T1.Column A = Column B and T1.Column B = Column A)

有没有更好的方法来编写这个查询?

【问题讨论】:

【参考方案1】:

以下应该有效:

SELECT * FROM TABLE1 T1 
WHERE NOT EXISTS (SELECT 1 FROM TABLE1 T2 
                  WHERE T1.ColumnA = T2.ColumnB AND 
                        T1.ColumnB = T2.ColumnA)

【讨论】:

非常感谢。此查询适用于我的要求。【参考方案2】:

使用外部自连接过滤掉匹配项:

select a.*
from table1 a
left join table1 b on a.columna = b.columnb
  and a.columnb = b.columna
where b.columnb is null

【讨论】:

但我总是在 B 列中有数据。它永远不是 NULL 值。 @user3430457 这个查询应该有效。在 JOIN 之后,b.ColumnAb.ColumnB 在没有匹配的情况下将为 NULL。 @siddy 这不会选择 columnb 为空的行!它选择 从连接 为空的行,当没有连接时会发生这种情况 - 即,这会选择 没有 具有匹配连接行的所有行,这正是你想要什么。尝试查询并亲自查看。此外,此查询将胜过“不在”类型查询【参考方案3】:
select
    a.*
from
   Table1 a
join
   Table1 b on
        a.ColumnA = b.ColumnB and
        a.ColumnB = b.ColumnA

【讨论】:

以上是关于需要从不满足以下条件的表中检索行 A = B 列和 B 列 = A 列的主要内容,如果未能解决你的问题,请参考以下文章

从满足条件A的组中选择行。如果不是,请给我一行满足条件B的行

创建行满足条件的 Impala 文本表

Excel 如何设定以下条件? A 列和B列里的文字不一样时 ,B列的文字变成红色

excel表中,怎样筛选出多个条件的数据

C#中如何用Linq在SQL Server的表中多列检索多个关键字

快速回顾MySQL:汇总和分组