Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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 - Fatal编程技术网

Mysql 消除联接中相同列的歧义

Mysql 消除联接中相同列的歧义,mysql,Mysql,[是的,我已经在这里和谷歌上搜索了这个问题的答案,但这有点难以查询。] (MySQL数据库。) 我希望发出一个返回以下内容的查询: messageid sender_name recipient_name 1 larry jane 2 mark alice 等等 下面的内容无法做到这一点,我预计不会,但这是一个开始: select m.messageid, p.name as "sen

[是的,我已经在这里和谷歌上搜索了这个问题的答案,但这有点难以查询。]

(MySQL数据库。)

我希望发出一个返回以下内容的查询:

messageid     sender_name   recipient_name
1             larry             jane
2             mark              alice
等等

下面的内容无法做到这一点,我预计不会,但这是一个开始:

select m.messageid, p.name as "sender_name", p.name as "recipient_name"
from messages m, people p
where m.senderid = p.personid and m.recipientid = p.personid
问题是,我不知道如何在sql中特别引用发送方和接收方,因为它们是同一个join子句的一部分,如果这样做有意义的话

谢谢

试试:

select m.messageid, pSender.name as "sender_name", pRecipient.name as "recipient_name"
from messages m
inner join people pSender on m.senderId = pSender.personId
inner join people pRecipient on m.recipientid = pRecipient.personId
对于您的连接方法(我认为这应该有效…我不太熟悉逗号连接)

尝试:

对于您的连接方法(我认为这应该有效…我不太熟悉逗号连接)


您的查询只返回从个人发送到自身的消息。比如:

select m.messageid, p1.name as sender_name, p2.name as recipient_name 
from messages m, 
join people p1
     on m.senderid = p1.personid 
join people p2
     on m.recipientid = p2.personid

也就是说,您需要一个发送者加入,一个接收者加入。您的查询只返回从个人发送到自身的消息。比如:

select m.messageid, p1.name as sender_name, p2.name as recipient_name 
from messages m, 
join people p1
     on m.senderid = p1.personid 
join people p2
     on m.recipientid = p2.personid

也就是说,您需要一个发送方连接和一个接收方连接

您可以将同一个表连接到查询中两次,只是使用不同的别名,例如:

select m.messageid, s.name as "sender_name", r.name as "recipient_name"
from messages m
    inner join people s on m.senderid = s.personid 
    inner join people r on m.recipientid = r.personid

您可以将同一个表连接到查询中两次,只是使用不同的别名,例如:

select m.messageid, s.name as "sender_name", r.name as "recipient_name"
from messages m
    inner join people s on m.senderid = s.personid 
    inner join people r on m.recipientid = r.personid

你不会一直都能找到你问题的确切答案,我真的会重温一下联接是如何工作的。我不确定你使用的是什么DBMS,但就个人而言,我并不喜欢你使用的隐含连接方法——我不知道它叫什么,但我认为对于某些DBMS来说,它可能变得越来越乏味了?数据库是MySQL。你不会一直找到你问题的确切答案,我真的会重温一下连接是如何工作的。不确定您使用的是什么DBMS,但就我个人而言,我不喜欢您使用的隐含连接方法-我不知道它叫什么,但我认为它可能会对某些DBMS造成影响?数据库是MySQL,仅供参考,以防混淆…您的查询使用的是较旧的语法(函数式,但较难阅读)。“from messages m,people p,其中m.senderID=p.personID”是“from messages m internal join people p on m.senderID=p.personID”的同义词。下面的答案使用了这种较新的语法(我指的是1992年的较新语法),但它们与您在这里使用的语法相同。仅供参考,以防出现混淆…您在这里的查询使用的是较旧的语法(功能性的,但较难阅读)。“from messages m,people p,其中m.senderID=p.personID”是“from messages m internal join people p on m.senderID=p.personID”的同义词。下面的答案使用了这个较新的语法(我指的是'92年的较新语法),但它们与您在这里使用的语法相同。您选择了两次“r.name”,其中发送者的名称应该是s.name。我做了一次编辑,但由于某种原因被三个人拒绝了。是的,修好了。谢谢提醒。您选择了两次“r.name”,其中发件人的名称应该是s.name。我做了一次编辑,但由于某种原因被三个人拒绝了。是的,修好了。谢谢你的提醒。