获取子表中的记录数

时间:2014-07-31 08:16:46

标签: mysql

我需要在子表中获取记录数。

父表

+-------------+------------+  
| Id          | Name       |  
+-------------+------------+  
| 1           | a          |  
+-------------+------------+    
| 2           | b          |    
+-------------+------------+ 
| 3           | c          | 
+-------------+------------+ 

子表:

+-------------+------------+  
| Id          | Code       |  
+-------------+------------+
| 1           | d1         |  
+-------------+------------+ 
| 1           | d2         | 
+-------------+------------+    
| 1           | d3         |  
+-------------+------------+ 
| 1           | d1         | 
+-------------+------------+    
| 2           | d2         |  
+-------------+------------+ 
| 2           | d3         | 
+-------------+------------+ 
| 3           | d1         |  
+-------------+------------+ 
| 3           | d2         | 
+-------+-----+------------+   

结果应该是:

+-------------+------------+------------+ 
| Id          | Name       | NumOfRec   |  
+-------------+------------+------------+ 
| 1           | a          |        4   |
+-------------+------------+------------+  
| 2           | b          |        2   |
+-------------+------------+------------+  
| 3           | c          |        2   |
+-------------+------------+ -----------+

我已经尝试了COUNT但是我只获得了一个ID的记录数,但没有获得其他ID的记录数。

4 个答案:

答案 0 :(得分:4)

这应该这样做:

SELECT ID, COUNT(ID) AS RECCOUNT FROM CHILD_TABLE
GROUP BY ID;

要根据父母身份获取记录,您可以这样做,

SELECT P.ID, P.NAME, COUNT(C.ID) FROM
PARENT P LEFT OUTER JOIN CHILD C
ON P.ID = C.ID
GROUP BY P.ID, P.NAME;

SQL FIDDLE HERE http://sqlfiddle.com/#!8/08d58/3

对于没有相应子记录的父ID,左外连接导致记录数为0。

答案 1 :(得分:1)

使用GROUP BY子句按每个不同的id值对结果进行分组。这应该这样做

要获得编辑结果,您必须加入父表。

SELECT 
    parent.id,
    parent.Name, 
    parent.other_columns_that_you_need,
    COUNT(id) as NumOfRec 
FROM 
    child 
INNER JOIN
    parent
ON
    parent.id = child.id
GROUP BY 
    parent.id

注意

在标准SQL中,您必须按所有列进行分组,而不使用聚合函数。 MySQL已经extended the use of GROUP BY,您可以省略具有相同值的列。这在此处有效,因为所有未聚合的列都直接依赖于父ID。

答案 2 :(得分:1)

使用group by

select count(*) as NumOfRec  , id from <Child table> group by id;

对于您的更新问题,这应该有效:

select parent.id,parent.name,numOdRec from parent join (
    select count(*) as NumOfRec  , id from <Child table> group by id) as childs on childs.id=parent.id

答案 3 :(得分:0)

使用此代码。使用count编写查询将为您提供解决方案

select distinct a.id,count(b.id) from parent a, child b where a.id=b.id;