【问题标题】:SQL query for cross column unique values in single tableSQL查询单表中跨列唯一值
【发布时间】: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)?

标签: mysql sql oracle11g


【解决方案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;

请注意,在某些情况下,这可能会返回对在原始数据中的顺序不同的对。

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多