postgres在“ main”表上加入“ other”表,该表对“ other”表有2个引用

时间:2019-03-25 01:03:41

标签: sql postgresql

我有以下数据库模式:

messages
  senderId: user
  receiverId: user

我正在尝试获取附有发送方用户记录和接收方用户记录的所有消息,但是我不确定如何执行此操作。在访问数据库之前,我使用登录用户的用户ID来获取登录用户的所有消息:

GET /messages?userId=some-id

我的SQL查询:

SELECT * from messages
WHERE senderId=userId
OR receiverId=userId

我想我知道如何进行联接以获取用户(如果这是他的ID):

SELECT messages.*, users.* from messages
INNER JOIN users ON messages.senderId = userId OR messages.receiverId = userId
WHERE senderId=userId
OR receiverId=userId

但是我不知道如何加入“其他”用户的信息。我也不知道我在上面尝试的查询是否可以正常工作,因为我尚未对其进行测试。

感谢您的帮助

基本上,我希望消息记录的所有数据以及2个关联用户的所有数据(json,不确定如何将其表示为列):

message: {
 title: 'message title',
 body: 'message body....',
 sender: {
  name: '',
  email: '',
  etc...
 },
 receiver: {
  name: '',
  email: '',
  etc...
 }
}

希望有帮助

1 个答案:

答案 0 :(得分:1)

您只是想获得两个名字吗?

select m.*, um.name as sender_name, ur.name as receiver_name
from messages m join
     users us
     on m.senderid = us.userid join
     users ur
     on m.receiverid = ur.userid
where @userid in (m.sender_id, m.receiverid);