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