流段的上游查询

mysql 8.0环境

使用"点位"表(positions),主键id,点位类型position_type_id(监测点、汇接点),经纬度,表中已有监测点记录,补充汇接点数据;

创建"流段"表(b_flow_segment),主键id,入口点in_pos_id,出口点out_pos_id,途经路径,,录输入所有监测点和汇接点之间的流段;

递归查询:点位30的所有上游管段:

sql 复制代码
with recursive t as (SELECT * FROM `b_flow_segment` WHERE out_pos_id=30 union all select a.* from b_flow_segment a join t on a.out_pos_id = t.in_pos_id) select id,in_pos_id,out_pos_id from t

递归查询:点位30的所有上游监测点:

sql 复制代码
with recursive t as (SELECT * FROM `b_flow_segment` WHERE out_pos_id=30 union all select a.* from b_flow_segment a join t on a.out_pos_id = t.in_pos_id) select t.id,t.in_pos_id,positions.title from t left join positions on t.in_pos_id=positions.id where positions.position_type_id=46

查询点位30到点位5之间的管段:

。。。

查询5点位到24点位间的路径:

sql 复制代码
WITH RECURSIVE shortest_path(in_pos, out_pos, depth, path) AS (
    SELECT 
        in_pos, 
        out_pos, 
        1, 
        concat(CAST(in_pos AS CHAR) ,',' , CAST(out_pos AS CHAR)) 
    FROM b_flow_segment
    WHERE in_pos = 5

    UNION ALL

    SELECT 
        a.in_pos, 
        a.out_pos, 
        shortest_path.depth + 1, 
        CONCAT(shortest_path.path, ',', CAST(a.out_pos AS CHAR))
    FROM shortest_path
    JOIN b_flow_segment a ON shortest_path.out_pos = a.in_pos
    WHERE shortest_path.depth <= 9
)
SELECT * FROM shortest_path 
where out_pos=24
ORDER BY depth
相关推荐
bqq1986102612 分钟前
MySQL性能优化
mysql·mysql优化
雨辰AI1 小时前
SpringBoot3 + 人大金仓读写分离 + 分库分表 + 集群高可用 全栈实战
java·数据库·mysql·政务
长城20242 小时前
关于MySql的ONLY_FULL_GROUP_BY问题
数据库·mysql·聚合列
常常有2 小时前
MySQL 底层执行原理:输入SQL语句到两阶段提交
数据库·sql·mysql
Mr. zhihao2 小时前
深入解析redis基本数据结构
数据结构·数据库·redis
m0_748839492 小时前
利用天正暖通CAD快速掌握风管数量统计的方法
数据库
随身数智备忘录2 小时前
什么是设备管理体系?设备管理体系包含哪些核心模块?
网络·数据库·人工智能
海市公约3 小时前
MySQL更新语句执行全流程:从Buffer Pool修改到二阶段提交
数据库·mysql·binlog·innodb·undo log·二阶段提交·update执行原理
颂love4 小时前
MySQL的执行流程
android·数据库·mysql
海市公约4 小时前
一条SQL查询的完整旅程:MySQL执行流程深度解析
sql·mysql·数据库优化·执行计划·连接器·查询缓存·sql执行原理