我可以在表的两列上使用INNER JOIN,引用另一个表的相同主键吗?

时间:2017-09-11 12:09:12

标签: mysql sql join inner-join

所以我有一个简单的DB_Schema, USER_INFO表,列用户名和全名 用户名是此表的主键 即可。 我正在建立一个简单的聊天网站。我还有一个 MESSAGES表,它有4列,

  • 自动生成的消息ID - PRIMARY KEY
  • 发送者 - 参考USER_INFO表&#39用户名
  • RECEIVER - 参考USER_INFO表的用户名
  • MESSAGE - 发送的消息字符串

我试图使用 INNER JOIN 获取消息,发件人(全名)和接收者(全名)的详细信息,我的SQL查询是:

  

SELECT message,sender,user_info.name as sender,receiver,user_info.name as receiver
FROM lets_chat.privatechat
INNER JOIN user_info ON privatechat.sender = user_info.username
INNER JOIN user_info ON privatechat.receiver = user_info.username;

这导致错误:错误代码1066:不唯一表/别名:' user_info'
有人可以帮助我纠正错误或让我正确的SQL语句来做到这一点?我使用 MYSQL DB

我擅长SPRING-HIBERNATE,我能够正确地完成它,只需要SQL帮助。 提前感谢

更新答案

  

选择PVC.message,UI1.name为发件人,UI2.name为收件人
  FROM lets_chat.privatechat AS PVC
  INNER JOIN user_info AS UI1 ON UI1.username = PVC.sender
  INNER JOIN user_info AS UI2 ON UI2.username = PVC.receiver;

这很有用。谢谢@ plaidDK

1 个答案:

答案 0 :(得分:2)

您需要为联接提供一个唯一的别名,并将您的列引用到您的表ALIAS,可能是这样的:您可以将列更正为正确的表别名,因此我不知道列的来源< /强>

SELECT PVC.message, PVC.sender, UI1.name as sender, PVC.receiver, UI2.name as 
receiver 
FROM lets_chat.privatechat AS PVC
INNER JOIN user_info AS UI1 ON privatechat.sender = UI1.username 
INNER JOIN user_info AS UI2 ON privatechat.receiver = UI2.username;