PostgreSQL使用子查询选择查询

时间:2015-01-22 14:37:01

标签: sql postgresql select

首先,我必须为糟糕的话题道歉。我没有更好的主意。

对于我网页上的内部消息,我有以下表格:

messages (id, subject, owner_id)
messages_recipients (id, recipient_id, message_id)

我需要通过一个附加字段获取特定用户的所有消息,其中包含特定消息的所有收件人ID。

例如:

messages:
id | subject | owner_id
1  | test 1  | 1
2  | test 2  | 2

messages_recipients:
id | recipient_id | message_id
1  | 10           | 1
2  | 11           | 1
3  | 10           | 2

预期结果是(用户10的消息):

message_id, subject, all users that receive message with this id
1,          test 1,  10;11; 
2,          test 2,  10;

我想列出特定用户的所有消息。对于实现回复,我还需要用户收到特定消息的信息。

1 个答案:

答案 0 :(得分:1)

认为这样做会:

SELECT r.message_id,subject,string_agg(r.recipient_id::text,';')
FROM messages m
INNER JOIN messages_recipients r
ON r.message_id = m.id
INNER JOIN (SELECT distinct message_id from messages_recipients 
            WHERE recipient_id = 10) u
ON u.message_id = r.message_id
GROUP BY r.message_id,subject