查找具有两列唯一组合的所有行[英] Finding all rows with unique combination of two columns

本文是小编为大家收集整理的关于查找具有两列唯一组合的所有行的处理方法,想解了查找具有两列唯一组合的所有行的问题怎么解决?查找具有两列唯一组合的所有行问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有这个表messages;

sender_id    recipient_id
1            2
1            3
1            3
2            1
3            1
2            3

我希望选择行:

  1. sender_id或receiver_id = current_user.id.
  2. 另一个字段应该是唯一的.

即.我想从sender_id = 2或recipient_id = 2的表中选择唯一的唯一结果,我需要此结果:

sender_id    recipient_id
2            1
2            3

如何做?
为什么?因为我希望构建一个类似Facebook的收件箱,其中发送和接收的消息聚集了,此查询是到目前为止的瓶颈.

我正在使用Rails 3.2和Postgres 9.3.

推荐答案

SELECT sender_id AS user_id, recipient_id AS other_user_id
FROM   messages
WHERE  sender_id = $current_user_id

UNION
SELECT recipient_id, sender_id
FROM   messages
WHERE  recipient_id = $current_user_id
-- ORDER BY 1, 2  -- optional

UNION(不是UNION ALL)从结果中删除了DISTINCT不必要的重复. 您可能需要在末尾添加ORDER BY以进行排序输出.

假设一张大桌子较少排位赛,两个BTREE索引通常提供最佳性能.一个具有领先或仅sender_id,另一个具有领先或仅recipient_id.

单个在(sender_id, receiver_id)上,反之亦然,但通常较慢.请参阅:

其他推荐答案

与ANSI SQL:

SELECT DISTINCT sender_id, reciepient_id
FROM messages
WHERE (sender_id = current_user.id or reciepient_id = current_user.id)

本文地址:https://www.itbaoku.cn/post/1763895.html