在两个列上的SQL内部联接

时间:2018-08-03 15:16:06

标签: mysql sql join select

如果我有两个数据库表

users-> (id, username)

messages-> (msg_id, sender_id, rec_id, text)

他们都同时在users.id = messages.sender_idusers.id = messages.rec_id上加入,因此我如何按照以下步骤打印结果

msg_id | sender  |  reciver  | text 
------------------------------------
1      |  david  |  michael  |  hello friend
2      |  eva    |  robert   |  pick me up

我已经尝试过

SELECT users.*, messages.* 
  FROM messages 
  INNER JOIN users 
  ON users.id = messages.sender_id 
  AND users.id = messages.rec_id

但是它似乎没有我想要的..所以任何想法

更新它似乎无法正常工作,因为它使发送者和接收者的名字相同,这是错误的!

msg_id | sender  |  reciver  | text 
------------------------------------
1      |  david  |  david  |  hello friend
2      |  eva    |  eva    |  pick me up

3 个答案:

答案 0 :(得分:3)

您需要两个join

SELECT m.*, us.username as sender_name, ur.username as receiver_nae
FROM messages m JOIN
     users us
     ON us.id = m.sender_id JOIN
     users ur
     ON ur.id = m.rec_id;

答案 1 :(得分:3)

您可能想多次加入

SELECT users1.*, users2.*,messages.* 
  FROM messages 
  INNER JOIN users1 
  ON users1.id = messages.sender_id 
  INNER JOIN users2 
  AND users2.id = messages.rec_id

答案 2 :(得分:1)

在当前条件下,用户ID等于发送者ID和接收者ID,这意味着您将只查询某人自己发送的消息-这可能不是您想要实现的。相反,您可以在users上加入两次,一次给发送者,一次给接收者:

SELECT m.msg_id, s.username AS sender, r.username AS receiver, m.text
FROM   messages m
JOIN   users s ON m.sender_id = s.id
JOIN   users r ON m.rec_id = r.id