如何将这两个查询合并为一个?

时间:2016-11-22 13:45:51

标签: mysql sql database join

我有两个查询,我无法正确组合它们。

我希望得到针对特定讨论的评论每个评论都可以包含存储在图片表中的多个图片。

SELECT c.CommentID, c.Body, u.Name
FROM Comments c
JOIN User u ON u.UserID = c.InsertUserID
WHERE c.DiscussionID = 1

SELECT Path
FROM Images
WHERE commentID = ?

这就是我想出来的,但它不起作用:

SELECT c.CommentID, c.Body, u.Name, i.Path
FROM Comments c
JOIN User u ON u.UserID = c.InsertUserID
LEFT JOIN Images i ON c.CommentID = i.ForeignID
WHERE c.DiscussionID = 1

1 个答案:

答案 0 :(得分:2)

SELECT c.CommentID, c.Body, u.Name, (SELECT GROUP_CONCAT(Path SEPARATOR "\n") FROM Images i WHERE i.commentID = c.CommentID) as 'images'
FROM Comments c
JOIN User u ON u.UserID = c.InsertUserID
WHERE c.DiscussionID = 1

每个评论都会收到一行,所有评论图片都会显示在“图片”字段中。图像将以换行符("\n")分隔。

JOIN版本的要求:

SELECT c.CommentID, c.Body, NAME, GROUP_CONCAT(Path SEPARATOR "\n") AS 'images'
FROM Comments c
LEFT JOIN Images i ON(i.commentID = c.CommentID)
WHERE   c.DiscussionID = 1
GROUP BY c.CommentID

请注意,JOIN版本可能不如子查询版本高效。第一个查询中的GROUP BY阶段发生在子查询级别,而在第二个查询的情况下,它发生在所有行已经加入之后。当然,查询优化器可能会在这里做一些魔术并且它们可能具有相同的成本。