我的数据库中的一些表格如下所示。
route1移动place1-place2-place1
。
route2移动place1-place2-place3-place2-place1
。
我需要创建一个占用2个位置的SQL查询:place1
和place2
,并提供包含道路IN ORDER链接的routeID
个路径。
我相信它需要在查询中递归。
任何人都可以帮助我吗?我非常感激。
答案 0 :(得分:0)
这里是一个起点Hierarchical queries in MySQL
快速提醒:分层数据是一个表中包含的父子关系。
典型的任务是以下列方式从表中返回值:
Resultset should be sorted like a tree, that is lexical sort by ancestry chains
Depth level should be returned along with each row
这可能听起来令人困惑,但实际上它很简单,就像在这个Oracle查询中所示:
SELECT LPAD(' ', level * 4, ' ') || id, parent, level
FROM t_hierarchy
START WITH parent = 0
CONNECT BY parent = PRIOR id
我们有一棵漂亮的树,按树排序,行根据深度级别缩进。
在上面的查询中,START WITH定义了树的根,CONNECT BY定义了父行和子行之间的连接条件。父列是通过向它们添加PRIOR关键字来定义的。
在MySQL中没有这样的构造,但它可以被模拟。
CREATE FUNCTION hierarchy_connect_by_parent_eq_prior_id(value INT) RETURNS INT
NOT DETERMINISTIC
READS SQL DATA
BEGIN
DECLARE _id INT;
DECLARE _parent INT;
DECLARE _next INT;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET @id = NULL;
SET _parent = @id;
SET _id = -1;
IF @id IS NULL THEN
RETURN NULL;
END IF;
LOOP
SELECT MIN(id)
INTO @id
FROM t_hierarchy
WHERE parent = _parent
AND id > _id;
IF @id IS NOT NULL OR _parent = @start_with THEN
SET @level = @level + 1;
RETURN @id;
END IF;
SET @level := @level - 1;
SELECT id, parent
INTO _id, _parent
FROM t_hierarchy
WHERE id = _parent;
END LOOP;
END
答案 1 :(得分:0)
Stack Overflow中已经有几个关于此主题的问题:
从MySQL中的分层数据生成基于深度的树(无CTE) Generating Depth based tree from Hierarchical Data in MySQL (no CTEs)
MySQL递归子查询[重复] MySQL recursive subquery
在关系数据库中存储分层数据的选项有哪些? What are the options for storing hierarchical data in a relational database?
如何在mysql中查询图形/分层数据 How to query graph/hierarchical data in mysql
MySql中的分层数据 Hierarchical Data in MySql