如何获得一排独特的ID?

时间:2014-06-02 15:55:07

标签: sql postgresql

我有这个用户对表:

table

我怎么能选择行,所以我有一对?例如,如果我有1-2,我不需要2-1。所以这是期望的输出:

1 | 2
4 | 11
5 | 6
7 | 8

可能这种情况下查询过于复杂,最好只获得图像的结果,并在应用程序中处理结果集。

我使用PostgreSQL,如果这有助于优化查询。

2 个答案:

答案 0 :(得分:2)

您可以使用least()greatest()函数执行此操作:

select distinct least(user_id, pair_id), greatest(user_id, pair_id)
from userpairs;

此方法有可能返回表中实际不存在的对(例如,如果出现“(9,3)”且没有“(3,9)”)。如果您只需要表中的实际对,则可以执行以下操作:

select user_id, pair_id
from userpairs up1
where user_id <= pair_id or
      not exists (select 1
                  from user_pairs up2
                  where up2.user_id = up1.pair_id and up2.pair_id = up1.user_id
                 );

如果原始数据中可能存在重复项,那么您也需要select distinct。否则没有必要。

答案 1 :(得分:0)

假设没有完全相同的副本可以处理:

SELECT *
FROM   pair p
WHERE NOT EXISTS (
   SELECT 1
   FROM   pair
   WHERE  (user_id, pair_id) = (p.pair_id, p.user_id)
   AND    pair_id < user_id
   )