MySQL 如何仅用一条SQL语句或存储过程或自定义函数 判断两条记录之间是否存在层级关联

图片说明

表格不止四个,还可能有表E、F、G。

数据库表之间的关系如图,子表的每条记录通过'parent_id'和'parent_table'两个属性指向父表的一条记录。所有表均包含这两个属性(A表中该值为空)。

如何只用一条SQL语句(或者写一个存储过程、自定义函数)用以判断任意两条记录之间知否有层级间的从属关系?

我尝试用动态执行SQL语句和递归去实现,但是由于技艺不精都失败了。请问各位大大这可如何是好啊~

有点像无限极分类, 不知道具体几层, 用递归弄

通过函数的方式判断两条记录是否存在层级关联

CREATE FUNCTION is_relation(类型 parent_id1,类型 parent_table1,类型 parent_id2,类型 parent_table2)
BEGIN
#判断纪录1是否与纪录2相关联
SELECT parent_id,parent_table INTO @pi,@pt FROM parent_table1 WHERE parent_id=parent_id1;
WHILE @pi IS NOT NULL
DO
IF @pi=parent_id2 THEN
RETURN 1;
END IF;
SELECT parent_id,parent_table INTO @pi,@pt FROM parent_table1 WHERE parent_id=@pi;
END WHILE;

#判断纪录2是否与纪录1相关联
...
类似于1
...

RETURN 0;
END

代码未补全只理了个思路,应该是可以实现的

看我理解的对不对。

不同的级别存在不同的表里边,指定表中某一个字段存有下一级级别的数据。

例如:
你画的图有4个级别,分别对应4个表。
级别1对应表1,某个字段存有级别2的数据;
级别2对应表2,某个字段存有级别3的数据;
级别3对应表3,某个字段存有级别4的数据;
级别4对应表4。。。。

假如有新的级别,就对应出现新的表,而且表名、存储字段的级别都有顺序。

你都说了不知道属于哪个级别,还要查询2条数据是否有对应关系。
可以先用循环先遍历一遍所有级别的表,查询一条数据是在哪个具体的表里边,然后再去上下2个级别的表去查询另一条数据是否存在就好了。