我需要在子表中获取记录数。
父表
+-------------+------------+
| 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的记录数。
答案 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;