Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 我可以在一个表的两列上使用内部联接,引用另一个表的相同主键吗?_Mysql_Sql_Join_Inner Join - Fatal编程技术网

Mysql 我可以在一个表的两列上使用内部联接,引用另一个表的相同主键吗?

Mysql 我可以在一个表的两列上使用内部联接,引用另一个表的相同主键吗?,mysql,sql,join,inner-join,Mysql,Sql,Join,Inner Join,因此,我有一个简单的DB_模式,USER_INFO表,其中列为用户名和全名,用户名是该表的主键。 我正在建立一个简单的聊天网站。我还有一个消息表,它有4列 自动生成的消息ID-主键 发件人-引用用户信息表的用户名 接收方-引用用户信息表的用户名 MESSAGE-已发送消息的字符串 我试图使用内部连接获取消息、发送者(全名)和接收者(全名)的详细信息,我的SQL查询是: 从lets_chat.privatechat中选择message、sender、user_info.name作为发件人、re

因此,我有一个简单的DB_模式,USER_INFO表,其中列为用户名和全名用户名是该表的主键。 我正在建立一个简单的聊天网站。我还有一个消息表,它有4列

  • 自动生成的消息ID-主键
  • 发件人-引用用户信息表的用户名
  • 接收方-引用用户信息表的用户名
  • MESSAGE-已发送消息的字符串
我试图使用内部连接获取消息、发送者(全名)和接收者(全名)的详细信息,我的SQL查询是:

从lets_chat.privatechat中选择message、sender、user_info.name作为发件人、receiver、user_info.name作为收件人
,在privatechat上选择Internal JOIN user_info.sender=user_info.username
在privatechat.receiver上选择Internal JOIN user_info.username

这导致了一个错误:错误代码1066:非唯一表/别名:“user\u info”
是否有人可以帮助我更正错误或获取正确的SQL语句来执行此操作?我使用的是MYSQL数据库

我擅长SPRING-HIBERNATE,我能够在这方面做得很好,只是需要SQL的帮助提前谢谢

更新答案

选择PVC.message,UI1.name作为发送方,UI2.name作为接收方
从lets_chat.privatechat作为PVC
在UI1.username=PVC.sender上作为UI1的内部加入用户\u信息
在UI2.username=PVC.receiver上作为UI2的内部加入用户信息


这起作用了。谢谢@

您需要为联接指定一个唯一的别名,并将列引用到表别名,可能是这样的:您可以将列更正为正确的表别名,因此我不知道列来自何处

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;

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

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;

您需要为每个表引用添加唯一的别名。用户信息ui1和用户信息UI2您需要为每个表引用添加唯一的别名。注意,用户信息ui1和用户信息UI2对不起,我忘记通知了,DB模式的名称是lets\u chat。作为此模式一部分的两个表是User_Info和PrivateChat,它们存储消息。发送方和接收方列引用到用户信息表的同一主键。(即用户信息的用户名)。对于上述查询,内部联接为发送方和接收方列提供了相同的值。(即“发件人”和“收件人”列中只显示发件人名称)。是!然后,您只需确保您的别名位于所需列的正确位置:)Ok。我是SQL新手,我已将我的陈述更正如下:
选择privatechat.message,UI1.name作为发送者,UI2.name作为接收者,从lets_chat.privatechat内部将用户信息作为UI1加入privatechat.sender=user_info.username将用户信息作为UI2加入privatechat.receiver=user_info.username但现在显示错误1054:“ON子句”中的未知列user_info.username“。很抱歉,您需要更改ON子句中的您的别名以及privatechat.sender=UI1.username内部加入用户_info作为UI2在privatechat.receiver=UI2.username;对不起,我忘记通知了,DB模式的名称是lets_chat。作为此模式一部分的两个表是User_Info和PrivateChat,它们存储消息。发送方和接收方列引用到用户信息表的同一主键。(即用户信息的用户名)。对于上述查询,内部联接为发送方和接收方列提供了相同的值。(即“发件人”和“收件人”列中只显示发件人名称)。是!然后,您只需确保您的别名位于所需列的正确位置:)Ok。我是SQL新手,我已将我的陈述更正如下:
选择privatechat.message,UI1.name作为发送者,UI2.name作为接收者,从lets_chat.privatechat内部将用户信息作为UI1加入privatechat.sender=user_info.username将用户信息作为UI2加入privatechat.receiver=user_info.username但现在显示错误1054:“ON子句”中的未知列user_info.username“。很抱歉,您需要更改ON子句中的您的别名以及privatechat.sender=UI1.username内部加入用户_info作为UI2在privatechat.receiver=UI2.username;