【问题标题】:MySQL Join 3 Tables and Count Table 3 by ID from Table 1 and Table 2MySQL Join 3 Tables and Count Table 3 by ID from Table 1 and Table 2
【发布时间】:2017-03-13 20:07:23
【问题描述】:

我有三个表,并且想对表 B 的总结果求和,因为表 B 将得到表 C 中的 count(*) 的总结果。我已经知道如何用 2 个表得到 count(*) 的总结果,但我不知道如何组合 3 张桌子。这是我想要的示例和结果。

就像A表在B表中有一个孩子,而B表中的一些在C表中有一个孩子,所以我只想知道A表有多少个孙子

这是我已经尝试使用 combine 与 2 个表的代码:

SELECT 
    table_a.*, 
    (
        SELECT 
            count(*) 
        FROM 
            table_b 
        WHERE 
            table_b.id_b = table_a.id_A
    ) AS totala 
FROM 
    table_a 

【问题讨论】:

  • 你能解释一下结果吗?
  • @Mureinik 感谢您的回复,我已经包含了结果示例。与上面的示例一样,音乐将有 4 个总数据,因为表 C - id_B 的数据与表 B - id_B 和表 B - id_A 的数据相等,表 A - id_A
  • @JhonnyJr。按照这个逻辑,Movie 的计数不应该是 5 吗?
  • @DarshanMehta Movie 是 3,因为表 C 中与表 B 有关系的数据只是 3 个数据
  • @JhonnyJr。是的,但是表 b 中与表 A 相关的数据是 4 行。那么,应该是 4 + 1 = 5 吗?

标签: mysql count sum inner-join


【解决方案1】:

您可以尝试以下方法吗:

SELECT a.id_A, a.Name, COUNT(c.id_c) AS total
FROM table_a a
LEFT JOIN table_B b ON a.id_A = b.id_A
LEFT JOIN table_C c ON b.id_B = c.id_B
GROUP BY a.id_a;

这里是 SQL Fiddle

【讨论】:

  • 它给了我“*) 附近的语法错误”的结果 :( 但如果我从 COUNT() 中删除“c”,它只会显示一个空结果
  • @JhonnyJr。修改了查询并添加了 SQL Fiddle。让我知道现在是否可以..
  • 哦该死的,它的工作:哦,你太棒了,非常感谢你
【解决方案2】:

你可能需要连接表的计数

select a.id_A, a.name, count(*) 
from tableA a
left join tableB b on a.id_A  = b.id_A
left join tableC c on c.id_b = b.id_b
group by a.id_A, a.name

【讨论】:

  • 它只是给了我表 b 的总结果,它与表 a 有关系,而不是与表 c :(
【解决方案3】:

我想你正在寻找这个:

SELECT A.*, COUNT(*) as Total
FROM table A
INNER JOIN table B using(id_A)
INNER JOIN table C using(id_B)
GROUP BY A.id_A ;

【讨论】:

  • 它给了我来自子句的结果 Unknown Column 'ID_A'
  • 我的回答中的 column_name 中有一个大写字母。但这不重要。我想这很好,因为你已经得到了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 2015-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
  • 2011-04-06
相关资源
最近更新 更多