加入父母与一个孩子的例子

时间:2013-12-17 17:19:40

标签: mysql sql

我有一个父表,称之为parents。每个父级在第二个表中都有一些子级,称为children。典型的左连接将是这样的:

select * 
from parents p 
left join children c
on p.id = c.parent_id

但是这将返回每个子行并重复所有父信息。我想要的是(对于这个应用程序)是每个父项的第一个子项,因此结果集与父表具有相同的行数。

Parent1  Child_of_parent1_1
Parent2  Child_of_parent2_1
Parent3  Child_of_parent3_1

我试图把它放在陌生的地方,但似乎无法把它弄清楚。

3 个答案:

答案 0 :(得分:1)

SELECT A.* FROM
(
   SELECT p.*, c.child_id, some_field_of_children
   FROM  parents p 
   LEFT JOIN children c ON p.id = c.parent_id
) A
WHERE A.child_id = ( SELECT MIN(B.child_id) FROM children B WHERE B.parent_id = A.parent_id)

我认为儿童表的'child_id'是我们可以用来获得第一个孩子的PK。

你可以用'timestamp'或'child_position'等其他列替换child_id,...

答案 1 :(得分:0)

手绘SQL: 选择 * 来自家长p 交叉加入儿童c 其中c.Id =(从子c2中选择max(c2.id),其中c2.ParentId = p.Id)

这样的东西会让1个孩子拥有当前的Parent并加入这两个孩子。 如果你想要它,如果没有孩子就返回东西,ann:

是否存在(从子c3中选择max(c3.id),其中c3.ParentId = p.Id)

干杯 -

答案 2 :(得分:0)

select 
p.parent_id, 
p.name as parent_name, 
c.name as child_name 
from parent p
join(
   select * from child where child_id in(
      select child_id from child
      group by parent_id)) c
on p.parent_id = c.parent_id

SQL小提琴: http://sqlfiddle.com/#!2/03fdc/14