gpt4 book ai didi

mysql - 如何使用 SQL 检索表中所有记录的所有第 3 级子节点?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:42:21 26 4
gpt4 key购买 nike

我有一个这样的表:

item(id, parent_id, data)

表中有多个数据集。每个数据集都有一个根记录,其中 parent_id 设置为 -1。父记录的任何子记录都将其 parent_id 记录设置为父记录的 ID。任何后续子级都将其 parent_id 设置为其直接父级的 parent_id

假设我想获取所有根节点。很简单

select * from item where parent_id = -1

选择所有非父节点也很容易:

select * from item where parent_id != -1

问题

如何只选择第 3 级节点(从所有记录中)?在我的具体情况下,我试图找出我的表中是否有任何第 3 级节点,或者确认表中的所有非根记录都是第 2 级节点。

奖励问题(在使用 Tom 的回答后)

此查询返回 50,003 条记录:

SELECT
count(L1.id)
FROM
Item L1
WHERE
L1.parent_id != -1;

这个返回 50,000 条记录:

SELECT
count(L2.id)
FROM
Item L1
INNER JOIN Item L2 ON L2.parent_id = L1.id
WHERE
L1.parent_id = -1;

我如何隔离这 3 条记录以查看它们发生了什么?

注意

奖金 - 事实证明这 3 条记录是孤立的,没有连接到父级。

最佳答案

由于您只需要进入三个级别,而且正好是三个级别,您可以简单地JOIN 下到该级别:

SELECT
L3.id,
L3.parent_id,
L3.data
FROM
Item L1
INNER JOIN Item L2 ON L2.parent_id = L1.id
INNER JOIN Item L3 ON L3.parent_id = L2.id
WHERE
L1.parent_id = -1

关于mysql - 如何使用 SQL 检索表中所有记录的所有第 3 级子节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36164927/

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