“重复”行-如何选择不同的行

问题描述 投票:0回答:4

我有一个具有这种结构的表

id1     id2
--------------
10     2
2     10
12    15

我需要使用SQL选择“与众不同”,因为第1行和第2行被认为是相同的

所以我需要一个查询结果

10    2
12   15

2    10
12   15

都很好。

任何好主意。这个问题使我发疯:-)

sql duplicates rows
4个回答
2
投票

一个简单的方法是:

select t.*
from t
where a < b or
      not exists (select 1 from t t2 where t2.b = t.a and t2.a = t.b) 

1
投票

在支持LEASTGREATEST的DBMS中,您可以使用它们来获得有序对:

select distinct
  least(id1, id2) as lesser_id,
  greatest(id1, id2) as greater_id
from mytable;

在不支持这些功能的DBMS中,可以使用CASE表达式来实现相同的功能:

select distinct
  case when id1 <= id2 then id1 else id2 as lesser_id,
  case when id1 >= id2 then id1 else id2 as greater_id
from mytable;

0
投票

我愿意:

SELECT DISTINCT id1, id2 
FROM (
    SELECT id1, id2 FROM mytable
    UNION
    SELECT id2, id1 FROM mytable
) AS combinations

0
投票

另一个解决方案,使用关系代替DISTINCT子句:

SELECT A.id1, A.id2
FROM mytable A LEFT JOIN mytable B ON A.id1 > B.id1 AND A.id1 = B.id2 AND A.id2 = B.id1
WHERE B.id1 IS NULL
© www.soinside.com 2019 - 2024. All rights reserved.