我有一个下面的桌子
Select X,Y from T
X | Y
------
1 | 2
1 | 3
2 | 1
3 | 5
3 | 1
列X和Y包含Strings,例如,我给出了数字。
我需要这个表的输出如下所示
1,2
1,3
3,5
这张桌子上唯一的一套。在第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)
发布于 2015-05-07 13:28:26
select distinct least(x,y), greatest(x,y)
from the_table;
least()
和greatest()
将值按顺序排列,以便将1,2和2,1作为1,2返回。
发布于 2015-05-07 13:29:54
DISTINCT为您提供了不同的行,所以您所需要做的就是排序您的对子,首先是较小的,然后是较大的。你用最少和最好的方法来做这件事。
select distinct least(x,y) || ',' || greatest(x,y)
from t;
https://stackoverflow.com/questions/30102423
复制相似问题