首页 > 解决方案 > 内连接条件

问题描述

我有两个表“cats_lables”和“classified_cats”,在“cats_lables”表中我只能添加一个新的猫类/标签。然后我可以使用这个类/标签对新猫进行分类并将它们添加到“分类猫”表中。

所以表格是这样的:

cats_lables: 

id   cats_lable
1     Polydactyl
2     Snowshoe
3     Calico


classified_cats:

id   class_id   cat_age    placeOfBorn   cat_price 
1          1     3 months   Eygipt         1000
2          3     6 months   Lebanon        2000

所以,这是只显示已分类猫的查询:

SELECT "cats_lables".*,
        CAST(COUNT("classified_cats"."class_id") AS int) AS class_count
      FROM "Labels"
      INNER JOIN "classified_cats"
        ON "classified_cats"."class_id"="cats_lables"."id"
      GROUP BY "cats_lables"."id"
      ORDER BY class_count DESC

但是我想升级我的查询以显示 cat 类,即使没有分配给它的 cat 。

如何修复我的查询?

标签: sqldatabaseinner-join

解决方案


我建议这样编写查询:

SELECT l.*, COUNT(cc."class_id") AS class_count
FROM "Labels" l LEFT JOIN
     "classified_cats" cc
     ON cc."class_id" = l."id"
GROUP BY l."id"
ORDER BY class_count DESC;

笔记:

  • "cats_labels"不在FROM子句中。我假设您的意思是“标签”。
  • 我强烈建议您不要在标识符上使用双引号。它们只是使查询更难编写和阅读。
  • 表别名使查询更易于编写和阅读。
  • 您没有指定您的数据库,但并非所有数据库都支持通过主键进行聚合,然后从表中选择其他列——尽管标准允许这样做。

推荐阅读