Mysql 消除联接中相同列的歧义
[是的,我已经在这里和谷歌上搜索了这个问题的答案,但这有点难以查询。] (MySQL数据库。) 我希望发出一个返回以下内容的查询:Mysql 消除联接中相同列的歧义,mysql,Mysql,[是的,我已经在这里和谷歌上搜索了这个问题的答案,但这有点难以查询。] (MySQL数据库。) 我希望发出一个返回以下内容的查询: messageid sender_name recipient_name 1 larry jane 2 mark alice 等等 下面的内容无法做到这一点,我预计不会,但这是一个开始: select m.messageid, p.name as "sen
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。我做了一次编辑,但由于某种原因被三个人拒绝了。是的,修好了。谢谢你的提醒。