Mysql 如何在SQL中检查子级的所有父记录的列值
假设我们有一个包含3列的表:ID、PARENT\u ID和VALUE 例如,我们有8条记录:Mysql 如何在SQL中检查子级的所有父记录的列值,mysql,sql,parent,hierarchical-data,Mysql,Sql,Parent,Hierarchical Data,假设我们有一个包含3列的表:ID、PARENT\u ID和VALUE 例如,我们有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”的记录的任何父记录的值是否为0?如果链中的父项的值为
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”的记录的任何父记录的值是否为0?如果链中的父项的值为0,则无需进一步向后检查
这必须通过获取任何子ID,并在该子ID之前查看其父ID的整个链。某些子项可能没有父项,也可能有父项链,并且父项记录可以有0个或多个子项记录
在本例中,搜索将在ID为“C”的记录处结束(即:返回该ID很好),因为它是父链(例如G)的父记录,其值为0。以下是MySQL 8.0递归CTE查询的一个示例,它执行您所描述的操作,遍历“G”的祖先并返回值为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 |
+------+-----------+-------+
阅读有关递归CTE查询的更多信息。同时指定预期结果。MySQL的哪个版本?如果你想要整个父链,你需要一个递归的CTE,它只在8.x中可用。当然,我有最新版本的MySQL。让我看看这个链接。mikehillyer解决方案不是MySQL 8递归CTE解决方案,它是为那些还没有MySQL 8的人提供的。