从下表中获取唯一集的最佳SQL查询

时间:2015-05-07 13:24:32

标签: sql oracle set-theory

我有一张下表

Select X,Y from T
X | Y
------
1 | 2     
1 | 3      
2 | 1     
3 | 5     
3 | 1  

列X和Y包含字符串,我只提供了数字。

我需要这个表的输出如下

1,2

1,3

3,5

i,e,表中的唯一集合。在第1行(1,2)和第3行(2,1)之外,我只需要一个集合,因为(1,2)=(2,1)在我的集合中。类似地(1,3)=(3,1)。 因此,该表中的唯一集合是(1,2)(1,3)和(3,5)。

我在SQL下面试过,让我知道是否有更好的方法,因为我不确定我是否可以使用'>'或者'<&#;与ROWID

SELECT X||','||Y FROM T t1
WHERE NOT EXISTS (SELECT 1 FROM T t2
WHERE t1.X=t2.Y AND t1.Y=t2.X and t1.ROWID>t2.ROWID)

2 个答案:

答案 0 :(得分:2)

select distinct least(x,y), greatest(x,y)
from the_table;

least()greatest()将值放入一个顺序中,以便将1,2和2,1作为1,2返回。 distinct然后删除重复项

答案 1 :(得分:0)

DISTINCT为您提供不同的行,所以您需要做的就是订购对,首先是小的,然后是较大的。你用最好和最好的方式做到这一点。

select distinct least(x,y) || ',' || greatest(x,y)
from t;