【问题标题】:SQL inner join on two colums两列上的 SQL 内连接
【发布时间】:2018-08-03 15:16:05
【问题描述】:

如果我有两个数据库表

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

【问题讨论】:

  • “不工作”是什么意思?为您的用户和消息表发布一些输入数据
  • 您正在比较两个项目从消息到 users.id。不应该是两个不同的值吗?

标签: mysql sql join select


【解决方案1】:

您可能想多次加入

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】:

你需要两个joins:

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;

【讨论】:

    【解决方案3】:

    在您当前的情况下,用户 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
    

    【讨论】:

      猜你喜欢
      • 2013-09-15
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      • 2011-01-13
      相关资源
      最近更新 更多