【问题标题】:Table identifiers with LEFT JOIN带有 LEFT JOIN 的表标识符
【发布时间】:2011-11-15 02:35:24
【问题描述】:

tableD.id = tableC.id AND tableD.id = tableE.id 上的连接怎么说? tableD 和 E 都可能有 0 行,我需要计算它们,即。选择计数(E.id)。问题是我不知道在哪里声明表标识符。

我试过了:

FROM 表 B B、表 D D、表 E E ...

LEFT JOIN (tableC C, tableD D) ON ...

SELECT B.*, COUNT(C.id) AS cCount 
FROM tableB B
LEFT JOIN (tableC C)
ON (B.id = C.id)
GROUP BY B.id

【问题讨论】:

  • 是否可以提供样本数据以及您想要的结果?
  • 似乎我问错了问题,但我需要的是聚合连接的行 D 然后计算它们,所以我将计算 C 和 D。我的答案在某处我猜是聚合。
  • 您现在提到了表 C 和 D,那么 E 呢?
  • 计数 C 和 E 抱歉,适当的连接只需要 D。
  • 更像是为 D 和 E 的连接添加更多条件,对不起,我的问题遗漏了很多,哈哈

标签: mysql left-join


【解决方案1】:

从您的问题中很难看出您在寻找什么,但我相信就是这样:

SELECT B.*, COUNT(C.id) AS cCount 
FROM tableB AS B
LEFT JOIN tableC AS C ON B.id = C.id
LEFT JOIN tableD AS D ON C.Id = D.Id
LEFT JOIN tableE AS E ON D.Id = E.Id
GROUP BY B.id

【讨论】:

  • 对于连接 D 和 E,如果只允许表 D 没有行来进行连接怎么办?
  • 如果 D 没有任何行,这个查询仍然有效。 D 和 E 表不会返回任何内容(因为您将 D 与 E 链接,E 不能返回任何与 D 匹配的记录)。
  • 问题是我的 C 计数被 E 和 D 的连接破坏了。嗯。不知何故,我需要对 E 的行进行分组,这样 D 的行数就不会损坏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
  • 2014-05-26
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多