我有这两个查询,但我无法将它们正确组合。
我想获得对特定讨论的评论并且每个评论都可以有多个图像,这些图像存储在图像表中。
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
最佳答案
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 阶段发生在子查询级别,而在第二个查询的情况下,它发生在所有行都已经连接之后。当然,查询优化器可能会在这里发挥一些作用,并且它们可能具有相同的成本。
关于mysql - 如何将这两个查询合并为一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40743488/