Mysql 如何在一个查询中使用两个左连接?

Mysql 如何在一个查询中使用两个左连接?,mysql,sql,database,database-design,Mysql,Sql,Database,Database Design,我有两个查询,但我希望结果在同一个返回表中 第一个查询返回所有帖子的列表,并将其注释作为列表。注释存储在不同的表中 SELECT E.id, E.time, E.title, E.body, E.type, C.comments FROM elements E LEFT JOIN( SELECT elementID, GROUP_CONCAT(body SEPARATOR '|-|') AS comments FROM comments GROUP BY elementI

我有两个查询,但我希望结果在同一个返回表中

第一个查询返回所有帖子的列表,并将其注释作为列表。注释存储在不同的表中

SELECT E.id, E.time, E.title, E.body, E.type, C.comments
FROM elements E
LEFT JOIN(
    SELECT elementID, GROUP_CONCAT(body SEPARATOR '|-|') AS comments
    FROM comments
    GROUP BY elementID
) C on C.elementID = E.id
SELECT E.id, E.googleID, E.title, L.likeCount
FROM elements E
LEFT JOIN (
    SELECT elementID, COUNT(id) AS likeCount
    FROM likes
    GROUP BY elementID
) L ON L.elementID = E.id;
第二个查询返回一个所有帖子的列表,其中包含该帖子作为新列的赞/赞成票数。类似的内容存储在不同的表中

SELECT E.id, E.time, E.title, E.body, E.type, C.comments
FROM elements E
LEFT JOIN(
    SELECT elementID, GROUP_CONCAT(body SEPARATOR '|-|') AS comments
    FROM comments
    GROUP BY elementID
) C on C.elementID = E.id
SELECT E.id, E.googleID, E.title, L.likeCount
FROM elements E
LEFT JOIN (
    SELECT elementID, COUNT(id) AS likeCount
    FROM likes
    GROUP BY elementID
) L ON L.elementID = E.id;

在同一个查询中,我如何将注释的串联列表作为一列,并将喜欢的数量作为一列。

好吧,为什么您不能
像对其他查询一样将这两个查询连接起来呢

SELECT E.id, E.time, E.title, E.body, E.type, C.comments, E.googleID, L.likeCount
FROM elements E
LEFT JOIN(
    SELECT elementID, GROUP_CONCAT(body SEPARATOR '|-|') AS comments
    FROM comments
    GROUP BY elementID
) C on C.elementID = E.id
LEFT JOIN (
    SELECT elementID, COUNT(id) AS likeCount
    FROM likes
    GROUP BY elementID
) L ON L.elementID = E.id;

那么,为什么不能像对其他查询所做的那样,将这两个查询都加入到
中呢

SELECT E.id, E.time, E.title, E.body, E.type, C.comments, E.googleID, L.likeCount
FROM elements E
LEFT JOIN(
    SELECT elementID, GROUP_CONCAT(body SEPARATOR '|-|') AS comments
    FROM comments
    GROUP BY elementID
) C on C.elementID = E.id
LEFT JOIN (
    SELECT elementID, COUNT(id) AS likeCount
    FROM likes
    GROUP BY elementID
) L ON L.elementID = E.id;
可以将同一级别的联接“堆叠”在一起,如下所示:

SELECT
    E.id
,   E.time
,   E.title
,   E.googleID
,   E.body
,   E.type
,   C.comments
,   L.likeCount
FROM elements E
LEFT JOIN(
    SELECT elementID, GROUP_CONCAT(body SEPARATOR '|-|') AS comments
    FROM comments
    GROUP BY elementID
) C on C.elementID = E.id
LEFT JOIN (
    SELECT elementID, COUNT(id) AS likeCount
    FROM likes
    GROUP BY elementID
) L ON L.elementID = E.id;
只需将希望从两个联接返回的一组列放入选择列表,并将联接彼此相邻。

您可以将相同级别的联接“堆叠”在一起,如下所示:

SELECT
    E.id
,   E.time
,   E.title
,   E.googleID
,   E.body
,   E.type
,   C.comments
,   L.likeCount
FROM elements E
LEFT JOIN(
    SELECT elementID, GROUP_CONCAT(body SEPARATOR '|-|') AS comments
    FROM comments
    GROUP BY elementID
) C on C.elementID = E.id
LEFT JOIN (
    SELECT elementID, COUNT(id) AS likeCount
    FROM likes
    GROUP BY elementID
) L ON L.elementID = E.id;
SELECT E.id, E.time, E.title, E.body, E.type,
(SELECT GROUP_CONCAT(body SEPARATOR '|-|') AS comments
FROM comment c where C.elementID= E.id group by C.elementID) as comments,
(SELECT  COUNT(id)
FROM likes L where L.elementID=E.id
GROUP BY elementID) as likeCount
FROM elements E

只需将希望从两个联接返回的一组列放入选择列表,并将联接放在彼此相邻的位置。

第5行的“注释C on E.id=C.elementID LEFT like L on E.id=L.elementID group by E.id”附近有语法错误。@Connorelsea:我更新了它。请检查并让我知道。谢谢。我很喜欢你的回答。它不仅大大缩短了查询时间,而且还解决了0返回为null的问题,我必须在服务器代码中纠正这个问题。谢谢欢迎……我很高兴它能按照您的全部要求为您服务。:)任何阅读本文的人都要注意:无论是在计算
likeCount
还是在复制注释时,这都是不正确的。其他两个答案是正确的。它说在第5行的“E.id上的注释C=C.elementID左像E.id上的注释L=L.elementID group by E.id”附近有语法错误。@Connorelsea:我更新了它。请检查并让我知道。谢谢。我很喜欢你的回答。它不仅大大缩短了查询时间,而且还解决了0返回为null的问题,我必须在服务器代码中纠正这个问题。谢谢欢迎……我很高兴它能按照您的全部要求为您服务。:)任何阅读本文的人都要注意:无论是在计算
likeCount
还是在复制注释时,这都是不正确的。其他两个答案是正确的。
SELECT E.id, E.time, E.title, E.body, E.type,
(SELECT GROUP_CONCAT(body SEPARATOR '|-|') AS comments
FROM comment c where C.elementID= E.id group by C.elementID) as comments,
(SELECT  COUNT(id)
FROM likes L where L.elementID=E.id
GROUP BY elementID) as likeCount
FROM elements E