用于比较行的SQL查询

时间:2011-04-20 14:46:07

标签: sql oracle oracle10g

我们假设我们有一张桌子:

id1  id2
1    2
2    1
3    4
4    3

预期输出

id1  id2
1    2 
3    4

第1,2和2,1行是相同的,只需要输出一行。 什么是SQL查询。

4 个答案:

答案 0 :(得分:4)

假设您的RDBMS支持LEASTGREATEST(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
);