mysql - 从同一个表中选择父母和父母的孩子并按顺序排列
问题描述
我尝试选择所有父母和所有父母的孩子,然后将每个父母的孩子的计数(*)加入父母的行。
SELECT a.*,COUNT(b.*) FROM cat AS a
LEFT JOIN (SELECT * FROM cat AS b WHERE b.ana_cat=a.id)
ON b.ana_cat=a.id
WHERE a.ana_cat=0
但不起作用,因为我对 sql 知之甚少。我怎样才能得到这样的结果:
|id|cat_title|ana_cat|COUNT(*)|
-------------------------------
|1 |Cultures | 0 | 4 |
|4 |Haoussa | 1 | 0 |
|9 |Zarma | 1 | 0 |
|7 |Peuls | 1 | 0 |
|8 |Toubou | 1 | 0 |
|3 |Histoire | 0 | 2 |
|6 |Nigerien | 3 | 0 |
|2 |Africain | 3 | 0 |
|1 |Divers | 0 | 0 |
|1 |Archive | 0 | 0 |
解决方案
我认为相关子查询更适合您的问题:
SELECT c.*,
(SELECT COUNT(*)
FROM cat ca
WHERE ca.ana_cat = c.id
)
FROM cat c
WHERE c.ana_cat = 0;
我不确定是否WHERE
需要。
推荐阅读
- php - 使用 laravel 将数据提取到数据表中
- javascript - 有趣的是,Angularjs 控制器运行了两次
- python - 在 yaml 文件中分解映射键
- shell - 如何更改shell脚本中的目录?
- javascript - 创建对象时调用函数
- php - PHP:动态复制数组的内容?
- javascript - 使用javascript在div中显示输入字段值
- websocket - 使用 https 时 GKE Ingress 丢弃 websocket 连接
- mongodb - 无法在 MongoDB 中使用 Robot 3T 在基于集合级别角色的访问中执行 listCollections
- sql - 从系统表中选择名称并从此表中选择