sql - 使用 SQL 获取孩子的所有父母
问题描述
我有一个表,其中包含名为社区的属性(CommunityID、Name、Description、ParentCommunityID)。CommunityID
是主键,ParentCommunityID
是外键指的是同一张表。没有父级的社区的ParentCommunityID
价值为 NULL。我想选择一个社区的所有父母。
我尝试使用在此处找到的答案。但是当我进入一个没有父社区的社区时(在我的情况下 parentCommunityID 为空)它给出了错误的答案。此外,如果我从中删除DISTINCT
关键字,有时会select DISTINCT ParentCommunityID
给出相同的CommunityID
两次。
with communities as
(
select CommunityID, ParentCommunityID
from communities
where CommunityID = 268
union all
select c.CommunityID, c.ParentCommunityID
from communities c
join communities p on c.CommunityID = P.ParentCommunityID
AND c.CommunityID<>c.ParentCommunityID
)
select ParentCommunityID
from communities
ORDER BY ParentCommunityID;
我无法弄清楚这段代码有什么问题?我想选择一个社区的所有家长。我对此查询也没有明确的想法。
解决方案
您正在使用“社区”作为 with 的别名。它应该有所不同,因此您可以对您的联接有一个清晰的定义:
with _communities as
(
select CommunityID, ParentCommunityID
from communities
where CommunityID = 11
union all
select p.CommunityID, p.ParentCommunityID
from communities p
join _communities c on p.CommunityID = c.ParentCommunityID
)
select ParentCommunityID
from _communities
where ParentCommunityId is not null
ORDER BY ParentCommunityID;
推荐阅读
- android - 如何自定义拉动滑动以刷新布局androidx?不使用任何库
- sql - ORA-06502数字或值错误:空表索引键值
- android - 从firebase实时数据库android中检索特定数据
- r - 如何构建一个循环遍历数据帧并转换其中数据的函数(R)
- android - Calendar.Events?.get(calendarId, eventId) 抛出 android.os.NetworkOnMainThreadException 错误
- php - 需要求第二次嵌套的值的总和
- node.js - 基于 TLS 的 React 和 NodeJS
- perl - 从大量文本文件中提取的字符串的高效缓存解决方案
- python - Pythons matplotlib 中的实时图表不更新
- javascript - 将数组中的第一个匹配元素存储在另一个数组中