一次以上在同一张表中进行连接

4

我可能有点傻,希望有人能帮助我。

我有一个简单的两列用户表(ID,USERNAME)。 我有一张图片的评论表(COMMENT,COMMENTFROM,COMMENTTO)。

COMMENTFROM是发表评论的用户的ID。 COMMENTTO是添加了评论的图像所有者的ID。这两个用户都包含在USERS表中。

我想提取并显示如下的行

"really nice photo" - to USERXYZ - from USER123**

这让我感到困惑,因为如果我将USERS表连接到comments表上:
WHERE comments.userfrom = users.id

这只能让我得到每行中所需的2个用户名之一。有没有办法可以同时获得两个?

我甚至不确定如何在SOF上搜索这个答案,如果以前有人回答过,我很抱歉。如果有人能指点我正确的方向,我将不胜感激 :)


1
请不要太自责。此外,更具体的问题标题将有助于大致了解正在发生什么。 - icedwater
没关系,如果你记不住一个概念/设计模式的名字也不要太担心 :) - Fabian Tamp
2个回答

9

您需要在SQL中两次加入 users 表,并在每个 JOIN 上给它们不同的标识符(即别名)。

SELECT 
    comment, 
    userFrom.username AS commentFrom,
    userTo.username AS commentTo
FROM comments 
JOIN users AS userFrom ON userFrom.ID = comment.commentFrom
JOIN users AS userTo ON userTo.ID = comment.commentTo

1
啊,我活着并且在学习中 :) 我不知道你可以这样做 - 谢谢你的帮助 Fabian,这真是救命稻草 :) - BigTed
@BigTed第一次让我意识到你可以这样做时,我的想法被彻底颠覆了! - Fabian Tamp
这个答案非常棒,不仅展示了如何两次连接表格,还展示了如何重命名共同的列,以便在 SQL 执行后可以分别访问它们。非常感谢。 - Andy Lorenz

-1
请尝试以下方法。
SELECT CONCAT(c.comment," - to ",
                        (SELECT USERNAME FROM user WHERE user.ID = c.COMMENTTO LIMIT 1),
                        " - from ",
                        (SELECT USERNAME FROM user WHERE user.ID = c.COMMENTFROM LIMIT 1)) FROM comments c

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接