让我们假设我们有一个表:比较行
id1 id2
1 2
2 1
3 4
4 3
预期的输出是
id1 id2
1 2
3 4
行1,2和2,1相同,只有一个需要被输出。 这是什么SQL查询。
让我们假设我们有一个表:比较行
id1 id2
1 2
2 1
3 4
4 3
预期的输出是
id1 id2
1 2
3 4
行1,2和2,1相同,只有一个需要被输出。 这是什么SQL查询。
假设你RDBMS
支持LEAST
和GREATEST
(在Oracle 10g):
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
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
使用联盟
另一种解决方案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
我对你要做什么的解释是:返回行是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
完全一样的问题,我最近还解决。请参阅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
);
您正在使用哪个'RDBMS'? – Quassnoi 2011-04-20 14:49:31
我使用Oracle 10g。 – 2011-04-20 14:55:13