SQL查询单表中跨列唯一值
Posted
技术标签:
【中文标题】SQL查询单表中跨列唯一值【英文标题】:SQL query for cross column unique values in single table 【发布时间】:2020-04-08 23:30:27 【问题描述】:我有一个包含两列的表格,数据如下 -
+---------+---------+
| Column1 | Column2 |
+---------+---------+
| A | B |
+---------+---------+
| C | D |
+---------+---------+
| B | A |
+---------+---------+
| E | F |
+---------+---------+
| F | E |
+---------+---------+
我的查询输出应该返回以下数据 -
+---------+---------+
| Column1 | Column2 |
+---------+---------+
| A | B |
+---------+---------+
| C | D |
+---------+---------+
| E | F |
+---------+---------+
如果我们有两行row1
和row2
,其中row1.column1=row2.column2
和row1.column2=row2.column1
,则输出应包含row1
或row2
这两行中的任何一个。
你能帮我解决这个问题吗?
【问题讨论】:
别再让事情变得更糟了。 您使用的是 mysql 还是 Oracle? 如果有一行(J,H),是否可以改为返回(H,J)? 【参考方案1】:我想你想要:
select col1, col2
from t
where col1 < col2
union all
select col1, col2
from t
where col1 > col2 and
not exists (select 1 from t t2 where t2.col1 = t.col2 and t2.col2 = t.col1);
您可能还想要:
select distinct least(col1, col2) as col1, greatest(col1, col2) as col2
from t;
请注意,在某些情况下,这可能会返回对在原始数据中的顺序不同的对。
【讨论】:
以上是关于SQL查询单表中跨列唯一值的主要内容,如果未能解决你的问题,请参考以下文章