2

我有一张下表

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

即,表中的唯一集。在第 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)
4

2 回答 2

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

least()并将greatest()值按顺序排列,以便 1,2 和 2,1 作为 1,2 返回。然后distinct删除重复项

于 2015-05-07T13:28:26.447 回答
0

DISTINCT 为您提供不同的行,因此您需要做的就是将您的对排序,首先是较小的,然后是较大的。你用 LEAST 和 GREATEST 做到这一点。

select distinct least(x,y) || ',' || greatest(x,y)
from t;
于 2015-05-07T13:29:54.917 回答