消除连接中相同列的歧义

时间:2014-08-14 17:32:32

标签: mysql

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

(MySQL数据库。)

messages table:
messageid
senderid
recipientid

people table:
personid
name

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

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子句的一部分,如果这是有道理的。

感谢

3 个答案:

答案 0 :(得分:2)

尝试:

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, p.name as "sender_name", p.name as "recipient_name"
from messages m, people pSender, people pRecipient
where m.senderid = pSender.personid and m.recipientid = pRecipient.personid

答案 1 :(得分:2)

您可以将同一个表连接到查询中两次,只需对其进行不同的别名,其中包括:

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

答案 2 :(得分:1)

您的查询仅返回从某人发送给自己的邮件。类似的东西:

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

那就是你需要一个发送者加入和一个接收者加入