MYSQL WHERE 字段在 GROUP_CONCAT()

MYSQL WHERE field IN GROUP_CONCAT()

我有几个表,每个表都有多对多关系,

假设 'parents'

    
    'Name', 'email', 'chid_id'
    'Chris Pan', 'chris@email.com', 1
    'Jane Pan',  'chris@email.com', 2
    'Sally Jenkins', 'sally@email.com', 3

然后'children'


    'id', 'first_name', 'last_name',
    1.    'Peter', 'Pan'
    2.    'Wendy', 'Wilson'
    3.    'Sally Jnr', 'Jenkins'

我想查询以获取所有 parents,按电子邮件分组,以及他们的 children。


    SELECT GROUP_CONCAT(parents.name) AS parents, LOWER(email) AS email, 
    (SELECT GROUP_CONCAT(CONCAT(children.first_name, ' ', children.last_name)) AS childrens_names 
    FROM children WHERE children.id IN ( parents.child_id )
    FROM parents GROUP BY email

问题:

这只会得到一个 children 记录,有时只有一个 parent,或一个 child,但通常每个都有 2 个(或更多) .

我在 WHERE

的子查询中尝试了 GROUP_CONCAT()

    WHERE children.id IN ( GROUP_CONCAT(parents.child_id) )

但这 return 没有任何 children 记录。

摘要 - 我想获取并加入由 parent 电子邮件分组并由 child_id

加入的两个表中的 1 行或多行

谢谢

正确连接表并聚合:

SELECT p.email,
       GROUP_CONCAT(p.name) AS parents,  
       GROUP_CONCAT(CONCAT(c.first_name, ' ', c.last_name)) AS childrens_names 
FROM parents p LEFT JOIN children c
ON c.id = p.child_id
GROUP BY p.email

如果存在重复子名的情况,则在 GROUP_CONCAT():

中使用 DISTINCT
GROUP_CONCAT(DISTINCT CONCAT(c.first_name, ' ', c.last_name)) AS childrens_names