mysql - 创建 SQL 查询

标签 mysql sql

下面列出了我的数据库中的一些表。 enter image description here

路线1移动地点1-地点2-地点1

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

我需要创建一个占用 2 个位置的 SQL 查询:place1place2,并提供包含以下链接的路由的 routeID道路井然有序。 我相信它需要在查询中递归。

有人可以帮我吗?我将非常感激。

最佳答案

这是一个起点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

关于mysql - 创建 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25204541/

相关文章:

mysql - 运行时查询分析和优化

MYSQL concat 结果在 where 条件下

java - 如何减少部分冲洗

sql - 为什么这个查询慢,where id in (sub select that returns null)

mysql - 如何在 mysql 中显示具有计算的运行时值(即不在数据库中)的虚拟列?

mysql - 选择在 where 子句中找不到的 ID

php - 从 mysql 自动填充下拉列表

mysql - 在 MySQL 中存储 whois 信息

PHP 无法更新 SQL

java - JDBC批处理在insert语句中使用 "CASE WHEN"