gpt4 book ai didi

mysql - SQL n :m Inheritance join

转载 作者:可可西里 更新时间:2023-11-01 07:33:24 26 4
gpt4 key购买 nike

我想加入一个表,其中包含组之间的 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

已确认输入错误。现在我第一层传承期都过不了。感谢 denied 指出这一点。

更新 2:预期结果

id | group_id | member_group_id
--------------------------------
1 | 1 | 2
2 | 2 | 3
3 | 3 | 4
4 | 4 | 5
5 | 5 | 6
6 | 6 | 7

预期结果:

ID

2
3
4
5
6
7

最佳答案

on p2.member_group_id = p1.member_group_id

看起来是错误的。

也许你想输入

on p2.parent_group_id = p1.member_group_id

也许您应该为父子关系寻找嵌套集模型

在那个模型中进行这样的查询要容易得多。

关于mysql - SQL n :m Inheritance join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9966114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com