sql - 内连接条件
问题描述
我有两个表“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 。
如何修复我的查询?
解决方案
我建议这样编写查询:
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
子句中。我假设您的意思是“标签”。- 我强烈建议您不要在标识符上使用双引号。它们只是使查询更难编写和阅读。
- 表别名使查询更易于编写和阅读。
- 您没有指定您的数据库,但并非所有数据库都支持通过主键进行聚合,然后从表中选择其他列——尽管标准允许这样做。
推荐阅读
- java - 模拟 - 缺少方法调用异常
- linux - 如何在 Linux 交叉编译项目的 Visual Studio 中添加库?
- javascript - 如何在不刷新当前页面上的 Youtube 视频的情况下获取数据
- c# - 根据条件对结果进行分组
- assembly - 生成外壳时的程序集段错误
- python - Python 3.6:csvwriter 只写入前两个字符串
- streaming - 只有一个 CPU 内核处理网络中断
- jupyter-notebook - Jupyterlab 扩展离线安装
- c++ - 如何解决自定义类对象的 unordered_set hasher 函数中的这个错误?
- oauth - Dart:客户端的 Websocket Bearer 身份验证