我有一张这种结构的table
id1 id2 -------------- 10 2 2 10 12 15
我需要使用sql选择“distinct”,因为行1和行2被认为是相同的所以我需要一个查询
10 2 12 15
或
2 10 12 15
两个都很好。有什么好主意吗。这个问题快把我逼疯了:-)
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)
fcwjkofz2#
在支持 LEAST 以及 GREATEST 您可以使用这些来获得有序的对:
LEAST
GREATEST
select distinct least(id1, id2) as lesser_id, greatest(id1, id2) as greater_id from mytable;
在不支持这些函数的dbms中,可以使用 CASE 实现相同目的的表达式:
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;
to94eoyn3#
我会做:
SELECT DISTINCT id1, id2 FROM ( SELECT id1, id2 FROM mytable UNION SELECT id2, id1 FROM mytable ) AS combinations
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
4条答案
按热度按时间wmomyfyw1#
一个简单的方法是:
fcwjkofz2#
在支持
LEAST
以及GREATEST
您可以使用这些来获得有序的对:在不支持这些函数的dbms中,可以使用
CASE
实现相同目的的表达式:to94eoyn3#
我会做:
h79rfbju4#
另一种解决方案是使用关系而不是独立子句: