2011-04-20 33 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 
);