我想加入一个包含组之间 n:m 关系的表。(组在单独的表中定义)。此表仅包含列出 member_group_id 和 parent_group_id 的条目。
鉴于这种结构:
id(int) | member_group_id(int) | parent_group_id(int)
“基本”查询如下所示:
select p1.group_id, p2.group_id, p1.member_group_id, p2.member_group_id
from group_member_group as p1
join group_member_group as p2
on p2.member_group_id = p1.member_group_id
“基本”查询正确显示了所有关系(我通过手动进行检查。)
问题是当我尝试将 where 子句应用于此查询以将特定组过滤为“原点”(我想要所有父组的第一个组)时,它仅返回最近的父组。例如像这样:
select p1.group_id, p2.group_id, p1.member_group_id, p2.member_group_id
from group_member_group as p1
join group_member_group as p2
on p2.member_group_id = p1.member_group_id
where p1.group_id = 1
谁能告诉我如何解决这个问题?或者用不同的方法来实现这一点。(我想我总是可以在服务器端的 C++ 源代码中执行此操作,但我必须将具有高增长潜力的整个表传输到应用程序服务器。)
更新:
select p1.group_id, p2.group_id, p1.member_group_id, p2.member_group_id
from group_member_group as p1
join group_member_group as p2
on p2.group_id = p1.member_group_id
确认输入错误。现在我没有超过第一级继承期。感谢拒绝指出这一点。
UPDATE2:预期结果
id | group_id | member_group_id
--------------------------------
1 | 1 | 2
2 | 2 | 3
3 | 3 | 4
4 | 4 | 5
5 | 5 | 6
6 | 6 | 7
预期结果:
身份证
2
3
4
5
6
7