所以我有三张桌子;
grandparent
,
parent
,和
child
。
parent
和child
每个都有一个parent
字段。
我想找到祖父母的所有孙子孙女,所有的孙子孙女都已婚,祖父母已经超过80岁。让我们假设每个祖父母只能有4个孙子。
所以我从祖父母表上的选择开始:
select id from grandparent where age > 80
这将给我一组年龄超过80岁的祖父母。
然后我发现父表中的父母按其祖父母分组;
select group_concat(id) as grandparent from parent where parent in (
select id from grandparent where age > 80
) group by parent
这给了我一组祖父母的父母,比如
grandparent: (1,2,3,4)
grandparent: (5,6,7,8)
grandparent: (9,10,11,12)
现在我想找到这些父母的所有孩子,他们都已婚,到目前为止,我有类似的东西;
select
group_concat(parent) as parent
group_concat(id) as children
from child
where
parent in (
select group_concat(id) as grandparent from parent where parent in (
select id from grandparent where age > 80
) group by parent
)
and relationship_status = "MARRIED"
having count(id) = 4;
但显然它不起作用,因为我需要使用in子句来搜索从前一个查询返回的每一行的集合。
我如何为每一行运行上述查询?
注意:这些不是我的表或字段的真实名称,只是删除了域知识,所以希望它更容易帮助。
答案 0 :(得分:1)
我想知道我是否理解你的问题,你能尝试一下吗?
SELECT p.parent_id, GROUP_CONCAT(p.parent), GROUP_CONCAT(c.id)
FROM grantparent gp INNER JOIN parent p gp.id = p.parent
INNER JOIN child c ON c.parent = p.id
WHERE gp.age > 80 AND c.relationship_status = 'MARRIED'
GROUP BY p.parent_id
HAVING COUNT(c.id) = 4;