这是我的 Structure(体系) 表
这是我的 Standard(标准) 表
两表之间的关系是 Standard 表的 StructureID 等于 Structure 中的Id 字段
现在我想查出来Id 为 7 下面的以及子节点 的所有标准
求指教有什么好的方法没有各位大佬。我想到了sql递归查询但是不太会请指教啊
这是我的 Structure(体系) 表
这是我的 Standard(标准) 表
两表之间的关系是 Standard 表的 StructureID 等于 Structure 中的Id 字段
现在我想查出来Id 为 7 下面的以及子节点 的所有标准
求指教有什么好的方法没有各位大佬。我想到了sql递归查询但是不太会请指教啊
一步步来吧,首先先把Structure表中根节点为7的点挑选出来:
SELECT GROUP_CONCAT(lv SEPARATOR ',') AS StructureIds
FROM
(SELECT @root:=
(SELECT GROUP_CONCAT(id SEPARATOR ',')
FROM STRUCTURE
WHERE FIND_IN_SET(StructureParentId, @root)) AS lv
FROM STRUCTURE
JOIN
(SELECT @root:=7) tmp
UNION (SELECT 7)) a
;
这条语句还比较好理解,就是从表的第一项开始,每一项给赋值一遍@root,条件为父节点在上一项@root中,然后就得到了tmp表,最后把tmp表的每一项@root连接起来;
然后就可以拿着这个字符串去Standard表中查询了:
SELECT *
FROM Standard
WHERE StructureID IN
(SELECT GROUP_CONCAT(lv SEPARATOR ',') AS StructureIds
FROM
(SELECT @root:=
(SELECT GROUP_CONCAT(id SEPARATOR ',')
FROM STRUCTURE
WHERE FIND_IN_SET(StructureParentId, @root)) AS lv
FROM STRUCTURE
JOIN
(SELECT @root:=1) tmp) a)
;
当中需要注意的是FIND_INT_SET这个查找函数。
你试试呢,希望能帮助到你。
2 回答680 阅读✓ 已解决
1 回答952 阅读
726 阅读
1 回答472 阅读
WITH locs(id,StructureCode,StructureName,StructureParentId)
已经测试数据跟你想要的一样