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

时间:2014-12-30 19:58:15

标签: sql join notin

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

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)

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

3 个答案:

答案 0 :(得分:0)

以下内容应该有效:

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

答案 1 :(得分:0)

使用外部自联接过滤匹配:

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

答案 2 :(得分:-1)

select
    a.*
from
   Table1 a
join
   Table1 b on
        a.ColumnA = b.ColumnB and
        a.ColumnB = b.ColumnA
相关问题