需要从不满足以下条件的表中检索行 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.ColumnA
和 b.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的行
Excel 如何设定以下条件? A 列和B列里的文字不一样时 ,B列的文字变成红色