“重复”行-如何选择distinct

eqfvzcg8  于 2021-07-29  发布在  Java
关注(0)|答案(4)|浏览(361)

我有一张这种结构的table

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

我需要使用sql选择“distinct”,因为行1和行2被认为是相同的
所以我需要一个查询

10    2
12   15

2    10
12   15

两个都很好。
有什么好主意吗。这个问题快把我逼疯了:-)

wmomyfyw

wmomyfyw1#

一个简单的方法是:

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)
fcwjkofz

fcwjkofz2#

在支持 LEAST 以及 GREATEST 您可以使用这些来获得有序的对:

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;
to94eoyn

to94eoyn3#

我会做:

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

h79rfbju4#

另一种解决方案是使用关系而不是独立子句:

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

相关问题