讓我們假設我們有一個表:比較行
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