创建SQL查询

时间:2014-08-08 13:22:35

标签: mysql sql

我的数据库中的一些表格如下所示。 enter image description here

route1移动place1-place2-place1

route2移动place1-place2-place3-place2-place1

我需要创建一个占用2个位置的SQL查询:place1place2,并提供包含道路IN ORDER链接的routeID个路径。 我相信它需要在查询中递归。

任何人都可以帮助我吗?我非常感激。

2 个答案:

答案 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