【问题标题】:Best SQL query to get unique sets from below table从下表中获取唯一集的最佳 SQL 查询
【发布时间】:2015-05-07 13:24:31
【问题描述】:

我有一张下表

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 下尝试过,如果有更好的方法,请告诉我,因为我不确定是否可以将 '>' 或 '

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)

【问题讨论】:

    标签: sql oracle set-theory


    【解决方案1】:
    select distinct least(x,y), greatest(x,y)
    from the_table;
    

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

    【讨论】:

    • 我以数字为例,X 列和 Y 列保存字符串
    • 那么您可能需要开始加入您的表格,如果您向我们提供您的表格定义和一些值,我们可能会更好地帮助您@KishorKumar
    • 工作 :) 谢谢,a_horse_with_no_name
    • @Kishor:如果 ('a', 'B') 被认为等同于 ('A', 'b'),您可能希望在每列周围包含 UPPER(或 LOWER)
    【解决方案2】:

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

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

    【讨论】:

    • 为什么要连接这些值?似乎完全没有必要。
    • @Boneist 因为 OP 将他想要的输出发布为逗号分隔值 ;-)
    猜你喜欢
    • 1970-01-01
    • 2020-11-12
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多