我有一个具有这种结构的表
id1 id2
--------------
10 2
2 10
12 15
我需要使用SQL选择“与众不同”,因为第1行和第2行被认为是相同的
所以我需要一个查询结果
10 2
12 15
或
2 10
12 15
都很好。
任何好主意。这个问题使我发疯:-)
一个简单的方法是:
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)
在支持LEAST
和GREATEST
的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;
我愿意:
SELECT DISTINCT id1, id2
FROM (
SELECT id1, id2 FROM mytable
UNION
SELECT id2, id1 FROM mytable
) AS combinations
另一个解决方案,使用关系代替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