MySQL查询以显示发件人和收件人的姓名

时间:2017-04-01 14:14:40

标签: mysql sql

我有一个名为users的表,如下所示:

 +----+----------------+
 | id | name           | 
 +----+----------------+
 |  1 | Blake          | 
 |  2 | Jenn           | 
 +----+----------------+

我有一个名为msg的表,如下所示:

 +----+----------------+----------------+
 | id | sender         | receiver       | 
 +----+----------------+----------------+
 |  1 | 1              | 2              |
 |  2 | 2              | 1              |
 +----+----------------+----------------+

所以现在我遇到了一个问题,因为我无法弄清楚如何将msg.sender(id)加入users.name(name)。

基本上我想要最终得到的东西,看起来有点像这样:

 +----+----------------+----------------+----------------+----------------+
 | id | sender         | sender_name    | receiver       | receiver_name  |
 +----+----------------+----------------+----------------+----------------+
 |  1 | 1              | Blake          | 2              | Jenn           |
 |  2 | 2              | Jenn           | 1              | Blake          |
 +----+----------------+----------------+----------------+----------------+

我希望这些插图对我试图解释的内容有所帮助。

2 个答案:

答案 0 :(得分:4)

join表只需users两次msg表 - 一旦发件人,然后是接收者。

select m.*,
    s.name as sender_name,
    r.name as receiver_name
from msg m
join users s on m.sender = s.id
join users r on m.receiver = r.id;

答案 1 :(得分:2)

您应该使用别名

两次加入用户表
  select  msg.sender, u1.name  as sender_name, msg.receiver, u2.name as receiver_name
  from msg
  inner join users u1 on u1.id =  msg.sender
  inner join users u2 on u2.id =  msg.receiver
相关问题