我正在尝试在3个表之间进行选择。唯一的问题是其中一个表用于解析2个不同表上的外键。表格的简短描述如下。我删除了一些列,以便只显示相关的列。
mail_addr
+------------+
| id |
+------------+
| email |
+------------+
msg_rcpt
+------------+
|MsgID |
+------------+
|rid |
+------------+
|content |
+------------+
msgs
+------------+
|MsgID |
+------------+
|sid |
+------------+
|msgTime |
+------------+
|size |
+------------+
我试过......
SELECT msg_rcpt.MsgID, msg_rcpt.content, mail_addr.email as rcpt_addr, msgs.msgTime
FROM msg_rcpt
JOIN msgs ON msgs.MsgID = msg_rcpt.MsgID
JOIN mail_addr ON msg_rcpt.rid = mail_addr.id
JOIN mail_addr ON msgs.sid = mail_addr.id
当我进行这些连接时,它会返回Not unique table / alias:' mail_addr'。 我知道这是错的,但我不确定为了解决这个问题我应该寻找甚至是什么。
任何反馈都将不胜感激。
蝰蛇
答案 0 :(得分:2)
您可以多次加入表,但是您必须为第二个和后续加入别名:
JOIN mail_addr ON msg_rcpt.rid = mail_addr.id
JOIN mail_addr AS someaslias ON msgs.sid = somealias.id
^^^^^^^^^^^^^ ^^^^^^^^^
答案 1 :(得分:2)
如果你想在同一张桌子上加入两次,你必须使用别名(至少有一个别名,但是两个别名会让事情变得更清楚)。
SELECT msg_rcpt.MsgID, msg_rcpt.content, m1.email as rcpt_addr, msgs.msgTime
FROM msg_rcpt
JOIN msgs ON msgs.MsgID = msg_rcpt.MsgID
JOIN mail_addr m1 ON msg_rcpt.rid = m1.id
JOIN mail_addr m2 ON msgs.sid = m2.id
答案 2 :(得分:0)
我不明白这是否是您想要实现的结果,但这应该有效(基于您的示例查询)
SELECT msg_rcpt.MsgID, msg_rcpt.content, m1.email as rcpt_addr, msgs.msgTime
FROM msg_rcpt JOIN msgs ON msgs.MsgID = msg_rcpt.MsgID
JOIN mail_addr m1 ON msg_rcpt.rid = m1.id
JOIN mail_addr m2 ON msgs.sid = m2.id
如果这不是您所期望的,请编辑您的问题,添加最终结果的示例!