sql - 查询以获取给定父 ID 的子记录
问题描述
我有一个查询要从 Table2 中查找子数据,这些子数据具有在其他表中定义的分层数据,即 oracle 中的 TABLE1。
表格1
ID, CHILD_ID, PARENT_ID
1, 1
2, 2, 1
3, 3, 2
4, 4, 3
5, 5, 4
6, 6, 4
7, 7, 4
8, 8, 5
9, 9, 5
表2
NAME,AGE,ID
JJ,22,1
XX,19,2
YY,20,3
KK,21,4
PP,18,5
CC,19,6
DD,22,7
SS,44,8
QQ,33,9
当我查询 ID 7 时,输出应该
NAME,AGE,ID
DD,22,7
因为没有 7 的孩子
当我查询 5 时,它应该在下面显示为 8 和 9 是 5 的孩子
NAME,AGE,ID
PP,18,5
SS,44,8
QQ,33,9
请建议,在此先感谢
解决方案
您可以执行以下操作来处理一般情况(即不仅会得到父母和孩子,而且可能会得到孩子的孩子等等)。
with thevalues as
(
SELECT child, parent
FROM table1
START WITH parent=4
CONNECT BY PRIOR child = parent
)
SELECT *
FROM table2
WHERE id IN (SELECT child FROM thevalues UNION ALL SELECT parent FROM thevalues)
whereparent=4
定义起始记录。Connect By用于这些分层查询。
尽管上述内容也适用于您示例中的简单案例,但如果您不关心孩子的孩子,您可能更喜欢类似的东西
SELECT *
FROM table2
WHERE id=4
UNION ALL
SELECT *
FROM table2
WHERE id IN
(
SELECT child
FROM table1
WHERE parent=4
)
请注意,在此示例中,我在两个地方硬编码了 4。
推荐阅读
- c++ - 运行第一个 gtest 示例时出现问题
- assembly - Nasm ld 重定位被截断以适应:R_X86_64_16
- javascript - 是否有可能在拉斐尔饼图的图例中添加卷轴?
- swift - 如何从 HealthKit 获取体脂百分比数据?
- java - 大批
- 获取单词在行号上的字符位置 - sql - 未使用 Snowflake 中的搜索优化服务
- amazon-web-services - 如何使用 AWS 生命周期管理策略仅将大于 100MB 的对象从 S3 Standard 转换到 AWS Glacier?
- javascript - 在javascript中循环对象数组
- c++ - 使用“cls”命令时,system() 函数出现问题
- html - 如何更改共享模块中共享模块的样式?