我有以下 3 個表:
父母表
id names
------------
1 john
2 William
兒童桌
id parent_id names
----------------------
1 1 Thomas
2 1 Alfie
3 2 Henry
指向的孫子表Children table
id parent_id names
----------------------
1 3 Harry
2 1 Joseph
3 1 Adam
我想得到每個祖父的名字,分別是孩子的數量和孫子的數量。
我嘗試了以下方法,但計數錯誤:
SELECT Parents.Id
,Parents.[name]
,COUNT(Children.Id) as children
,COUNT(Grandchildren.Id) as grandchildren
FROM Parents
LEFT JOIN Children
ON Parents.Id = Children.ParentId
LEFT JOIN Grandchildren
ON Children.Id = Grandchildren.ParentId
GROUP BY Parents.Id
,Parents.[name]
我可能做錯了什么?
uj5u.com熱心網友回復:
您應該計算每個父級的不同子級,因為連接可能會為每個子級回傳多于 1 行。
由于這是您的查詢,因此無需計算不同的孫子,但如果您決定添加更多連接,那么您也應該這樣做。
在任何情況下都使用關鍵字DISTINCT(和表的別名以使代碼更具可讀性):
SELECT p.Id, p.[name],
COUNT(DISTINCT c.Id) children,
COUNT(DISTINCT g.Id) grandchildren
FROM Parents p
LEFT JOIN Children c ON p.Id = c.ParentId
LEFT JOIN Grandchildren g ON c.Id = g.ParentId
GROUP BY p.Id, p.[name];
uj5u.com熱心網友回復:
我認為您只是缺少一個 DISTINCT 關鍵字。你的查詢應該像
select Parents.Id, Parents.[name] , COUNT( DISTINCT Children.Id ) children, count(Grandchildren.Id) grandchildren
from Parents
left join Children on Parents.Id = Children.ParentId
left join Grandchildren on Children.Id = Grandchildren.ParentId
group by Parents.Id, Parents.[name]
看演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/460350.html
