我们假设我们有一张桌子:
id1 id2
1 2
2 1
3 4
4 3
预期输出
id1 id2
1 2
3 4
第1,2和2,1行是相同的,只需要输出一行。 什么是SQL查询。
答案 0 :(得分:4)
假设您的RDBMS
支持LEAST
和GREATEST
(Oracle确实支持):
SELECT DISTINCT LEAST(id1, id2), GREATEST(id1, id2)
FROM mytable
跨平台版本:
SELECT DISTINCT
CASE WHEN id1 < id2 THEN id1 ELSE id2 END,
CASE WHEN id1 > id2 THEN id1 ELSE id2 END
FROM mytable
答案 1 :(得分:0)
Select ...
From MyTable As T
Where Exists (
Select 1
From MyTable As T2
Where T2.id1 = T.id2
And T2.id2 = T.id1
)
And T.id1 < T.id2
使用Union的另一种解决方案
Select T.id1, T.id2
From MyTable As T
Where T.id1 <= T.id2
Union
Select T.id2, T.id1
From MyTable As T
Where T.id1 > T.id2
答案 2 :(得分:0)
我对你要做的事情的解释是:返回行是id1匹配id2而id2匹配id1,但是当id1也小于或等于id2时,只返回该集合中的行。
select x.id1, x.id2 from
myTable x, myTable y
where x.id1 = y.id2 and y.id1 = x.id2 and x.id1 <= y.id1
答案 3 :(得分:0)
完全相同的问题我最近也必须解决。请参阅Eliminating duplicates。
select id1, id2
from t
where not exists (
select 1
from t
where id1 = t.id2
and id2 = t.id1
and rowid > t.rowid
);