You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询:获取表中符合特定条件的所有起止路段对

解决SQL查询起止路段对的问题

要获取所有符合条件的起止路段对,核心是正确使用自连接并设置精准的过滤条件。以下分两种常见场景给出解决方案:

场景1:所有符合条件的起止对(不要求路段衔接)

如果不需要路段之间有物理衔接(即起始路段的终点和终止路段的起点无需匹配),直接用交叉连接结合WHERE过滤即可:

SELECT
    start_seg.SegmentID AS 起始路段ID,
    end_seg.SegmentID AS 终止路段ID,
    start_seg.StartPointType,
    end_seg.EndPointType
FROM RoadSegments start_seg
CROSS JOIN RoadSegments end_seg
WHERE
    -- 起始路段的StartPointType为L或D
    start_seg.StartPointType IN ('L', 'D')
    -- 终止路段的EndPointType不为L或D
    AND end_seg.EndPointType NOT IN ('L', 'D');

场景2:需要路段衔接的起止对(起始路段终点=终止路段起点)

这是更贴合实际业务的场景,需要通过端点匹配来关联符合条件的路段:

SELECT
    start_seg.SegmentID AS 起始路段ID,
    end_seg.SegmentID AS 终止路段ID,
    start_seg.EndPoint AS 衔接端点,
    end_seg.EndPoint AS 最终终点
FROM RoadSegments start_seg
INNER JOIN RoadSegments end_seg
    -- 关联条件:起始路段的终点是终止路段的起点
    ON start_seg.EndPoint = end_seg.StartPoint
WHERE
    start_seg.StartPointType IN ('L', 'D')
    AND end_seg.EndPointType NOT IN ('L', 'D');

排查你之前仅找到第一组的原因

大概率是以下问题导致:

  • 连接条件错误:比如硬编码了某个特定路段ID的关联,而非通用的端点匹配逻辑
  • WHERE条件遗漏或错误:比如未正确过滤EndPointType NOT IN ('L', 'D'),或者字段值大小写与查询不匹配(比如实际值是小写l/d,但查询写了大写)
  • 未处理NULL值:如果EndPointType存在NULL,NOT IN ('L','D')会自动排除NULL行,若需要包含NULL,需修改条件为:
    AND (end_seg.EndPointType NOT IN ('L', 'D') OR end_seg.EndPointType IS NULL)
    

内容的提问来源于stack exchange,提问作者mermosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 22:29:57