2017-08-09 43 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 

希望这有助于!