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       |
+---------+---------+

如果我们有两行row1row2,其中row1.column1=row2.column2row1.column2=row2.column1,则输出应包含row1row2 这两行中的任何一个。

你能帮我解决这个问题吗?

【问题讨论】:

别再让事情变得更糟了。 您使用的是 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查询单表中跨列唯一值的主要内容,如果未能解决你的问题,请参考以下文章

在 Access CrossTab 查询报告中跨列求和行

sql查询去除重复值语句

java进阶|MySQL数据库系列文章之单表操作SQL语句

sql 单表/多表查询去除重复记录

SQL Server学习笔记——单表查询

SQL Server学习笔记——单表查询