2017-08-09 69 views
0

我有一個4表,其中我需要從db中獲取用戶信息,州名稱,分支名稱和孩子總數。Mysql查詢獲取全部孩子?

我用下面的SQL

SELECT `user_id` , `user_name` , state_name, branch_name 
FROM `user` 
LEFT JOIN state ON state_id = user_state_id 
LEFT JOIN branch ON branch_id = user_branch_id 

,但我也需要得到孩子的計數爲每個用戶,所以我用下面的查詢

SELECT `user_id` , `user_name` , state_name, branch_name, count(child_id) 
FROM `user` 
LEFT JOIN state ON state_id = user_state_id 
LEFT JOIN branch ON branch_id = user_branch_id 
LEFT JOIN child on parent_id = user_id group by user_id 

我要問一個問題,它是確定使用在整個查詢中計數組是由這個影響來自此查詢連接的數據

回答

1

在您的JOIN中有三個表參與。由於您是GROUPING BY user_id,因此每個user_id只有一行將出現在輸出中。讓我們拿第一個表格狀態。如果用戶只有一個狀態,那麼GROUP BY不會導致任何問題,因爲這一行將在輸出中。同樣適用於分支。

對於最後一個表「孩子」,如果用戶有多個孩子(顯然是按照您的查詢),則只有一行將出現在輸出中。正如你在'SELECT'中單獨使用count(child_id),這個計數就在輸出中。如果SELECT中的任何其他列不是'count',而是來自'child'表中的其他列,那麼只有第一個子元素的值將會出現在輸出中。

只要每個用戶在狀態表和分支表中只有一行,輸出就不會受到GROUP BY的影響。

1

它可能會更容易使用子查詢爲此:

SELECT `user_id` , `user_name` , state_name, branch_name 
(SELECT count(*) FROM `child` WHERE `parent_id` = `user_id`) as `child_count` 
FROM `user` 
LEFT JOIN state ON state_id = user_state_id 
LEFT JOIN branch ON branch_id = user_branch_id 

希望這有助於!