2011-04-20 66 views
1
SQL查詢

讓我們假設我們有一個表:比較行

id1 id2 
1 2 
2 1 
3 4 
4 3 

預期的輸出是

id1 id2 
1 2 
3 4 

行1,2和2,1相同,只有一個需要被輸出。 這是什麼SQL查詢。

+0

您正在使用哪個'RDBMS'? – Quassnoi 2011-04-20 14:49:31

+0

我使用Oracle 10g。 – 2011-04-20 14:55:13

回答

4

假設你RDBMS支持LEASTGREATEST(在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 
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  

使用聯盟

另一種解決方案
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 
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

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 
);