如何查看SQL中child的所有parent记录的列值

How to check the column value of all parent record of a child in SQL

假设我们有一个包含 3 列的 table:IDPARENT_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 查询的更多信息。