如何查看SQL中child的所有parent记录的列值
How to check the column value of all parent record of a child in SQL
假设我们有一个包含 3 列的 table:ID、PARENT_ID 和 值.
例如我们有 8 条记录:
ID PARENT_ID VALUE
A NULL 1
B A 1
C B 0
D C 1
E D 1
F E 1
G F 1
H G 0
我们如何使用 SQL 查询或存储过程(最好是 MySQL)检查 ID 为 "G" 的记录的任何 parent 记录是否具有值为 0?如果链中的 parent 的 VALUE 为 0,则无需进一步检查。
这必须通过获取任何 child ID 并查看其 parent 在 之前 child 的整个链来工作。一些 child 可能没有 parent 或也可能有一个 parent 链并且一个 parent 记录可以有 0 个或多个 child 记录。
在此示例中,搜索将在 ID 为 "C" 的记录处结束(即:return 该 ID 很好),因为它是 parent 链的记录 parents(对于 G)即 VALUE 为 0。
这是一个 MySQL 8.0 递归 CTE 查询的示例,它执行您描述的操作,遍历 'G' 和 return 值 = 0 的祖先:
with recursive cte as (
select * from mytable where id = 'G'
union all
select t.* from cte join mytable t on t.id = cte.parent_id
) select * from cte where value = 0;
+------+-----------+-------+
| id | parent_id | value |
+------+-----------+-------+
| C | B | 0 |
+------+-----------+-------+
阅读 https://dev.mysql.com/doc/refman/8.0/en/with.html 了解有关递归 CTE 查询的更多信息。
假设我们有一个包含 3 列的 table:ID、PARENT_ID 和 值.
例如我们有 8 条记录:
ID PARENT_ID VALUE
A NULL 1
B A 1
C B 0
D C 1
E D 1
F E 1
G F 1
H G 0
我们如何使用 SQL 查询或存储过程(最好是 MySQL)检查 ID 为 "G" 的记录的任何 parent 记录是否具有值为 0?如果链中的 parent 的 VALUE 为 0,则无需进一步检查。
这必须通过获取任何 child ID 并查看其 parent 在 之前 child 的整个链来工作。一些 child 可能没有 parent 或也可能有一个 parent 链并且一个 parent 记录可以有 0 个或多个 child 记录。
在此示例中,搜索将在 ID 为 "C" 的记录处结束(即:return 该 ID 很好),因为它是 parent 链的记录 parents(对于 G)即 VALUE 为 0。
这是一个 MySQL 8.0 递归 CTE 查询的示例,它执行您描述的操作,遍历 'G' 和 return 值 = 0 的祖先:
with recursive cte as (
select * from mytable where id = 'G'
union all
select t.* from cte join mytable t on t.id = cte.parent_id
) select * from cte where value = 0;
+------+-----------+-------+
| id | parent_id | value |
+------+-----------+-------+
| C | B | 0 |
+------+-----------+-------+
阅读 https://dev.mysql.com/doc/refman/8.0/en/with.html 了解有关递归 CTE 查询的更多信息。