這應該這樣做(MySQL的):
SELECT `parents`.`id`, `parents`.`name`, COUNT(`children`.*) AS sons
FROM `people` AS parents
LEFT JOIN `people` AS children ON `parents`.`id` = `children`.`father_id`
WHERE `parents`.`father_id` = 0
GROUP BY `parents`.`id`
根據加里我們需要添加name
到GROUP BY
在其他SQL數據庫:
SELECT `parents`.`id`, `parents`.`name`, COUNT(`children`.*) AS sons
FROM `people` AS parents
LEFT JOIN `people` AS children ON `parents`.`id` = `children`.`father_id`
WHERE `parents`.`father_id` = 0
GROUP BY `parents`.`id`, `parents`.`name`
我們正在與自身joing表這裏。所以我們把所有的父母和他們的孩子一起
這將導致這樣的結果:
parents.id parents.name children.id children.name
1 joe 7 david
2 mark 4 miki
2 mark 5 timi
2 mark 6 moses
3 muller 10 ermi
8 momo - - # left join allows this line
9 daniel - -
但是現在我們有了每個父母幾次。因此,我們在GROUP'ing父的id整個事情,這將導致如下:
parents.id parents.name COUNT(children.*)
1 joe 1
2 mark 3
3 muller 1
8 momo 0
9 daniel 0
我認爲你需要添加parents.name到group by子句以及 – Gary 2012-01-15 17:49:34
oops,誤解了你(upvote是爲了提醒我'SELECT'中的name不明確,我需要'parents'.'name');)爲什麼我需要組中的名字?該ID已經是唯一的,不是嗎?名字不會有所作爲。也許我錯了嗎? – Aufziehvogel 2012-01-15 17:52:33
+1值得一提的是,儘管在任何SQL中都可以使用相同的通用方法,但該查詢的某些功能是特定於MySQL的(即在分組查詢的「select」子句中反向引用的名稱和未分類的未分組列)。 – 2012-01-15 18:12:59