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

标签 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

最佳答案

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/

相关文章:

mysql - 我想使用 R 为我的 Shiny 仪表板创建动态下拉菜单?

mysql - SQL - 查找两个表中的重复行

mysql - MySQL 中的 SELECT DISTINCT 或 GROUP BY 哪个更快?

sql - 对于金融数据,对 DATETIME 建立索引有用吗?

sql - Oracle Date TO_CHAR ('Month DD, YYYY' ) 中有额外的空格

php - 使用 PHP 通过 id 从数据库中删除特定条目

mysql - SQL 查询从存储在多个数据库中的表中检索主键列

mysql - 如何用旧值+新值更新表?

database - Cassandra UUID 与 TimeUUID 之间有什么区别

sql - PostgreSQL日期查询性能问题