【问题标题】:Get total records of children from connected table从连接表中获取孩子的总记录
【发布时间】:2016-10-03 06:57:45
【问题描述】:

我使用的是 MariaDB 5.5,但对于此解决方案,它与 MySQL 相同。我有两个表,第一个包含画廊,第二个包含有关每个画廊中文件的信息。这是gallery 表的示例:

+----+-------+-----+
| id | name  | ... |
+----+-------+-----+
| 1  | test1 | ... |
| 2  | test2 | ... |
| 3  | test3 | ... |
| 4  | test4 | ... |
+----+-------+-----+

这是gallery_items表的示例:

+----+------+------------+-----+
| id | file | gallery_id | ... |
+----+------+------------+-----+
| 1  | img1 | 3          | ... |
| 2  | img2 | 2          | ... |
| 3  | img3 | 2          | ... |
| 4  | img4 | 1          | ... |
+----+------+------------+-----+

所以我尝试了这段代码:

SELECT gallery.*, COUNT(gallery_items.id) AS items FROM gallery JOIN gallery_items WHERE gallery_items.gallery_id = gallery.id;

嗯,我不太擅长数据库,所以这就是我寻求帮助的原因。这是我的预期结果:

+----+-------+-------+-----+
| id | name  | items | ... |
+----+-------+-------+-----+
| 1  | test1 | 1     | ... |
| 2  | test2 | 2     | ... |
| 3  | test3 | 1     | ... |
| 4  | test4 | 0     | ... |
+----+-------+-------+-----+

【问题讨论】:

    标签: mysql sql mariadb


    【解决方案1】:

    您需要GROUP BY 才能让COUNT 工作

    SELECT gallery.*, COUNT(gallery_items.id) AS items FROM gallery 
    LEFT JOIN gallery_items ON gallery_items.gallery_id = gallery.id
    GROUP BY gallery.id, gallery.name
    

    【讨论】:

    • 我之前从未使用过GROUP BY,非常感谢!我还将WHERE 更改为ON,因为它不适用于WHERE。大概只在MariaDB,其他的不知道。
    【解决方案2】:

    说明您可以使用以下查询

    SELECT
      g.*,COUNT(gi.id) AS items
    FROM
      gallery g
    LEFT JOIN gallery_items gi
    ON g.id = gi.gallery_id
    GROUP BY g.id;
    

    【讨论】:

      猜你喜欢
      • 2020-06-06
      • 2020-04-25
      • 2015-10-14
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 2013-09-05
      • 2020-03-29
      • 2010-10-11
      相关资源
      最近更新 更多