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

如何实现按BookingID判断Route列是否含字符D的SQL查询

解决BookingID关联Route含D的判断问题

给你两种简便方法,都能避免返回重复行,每个BookingID只出一次结果:

方法一:分组聚合判断

利用GROUP BY按BookingID分组,结合聚合函数和CASE语句判断是否存在含D的Route:

SELECT 
    b.BookingID,
    CASE 
        WHEN MAX(CASE WHEN bd.Route LIKE '%D%' THEN 1 ELSE 0 END) = 1 THEN 'Yes' 
        ELSE 'No' 
    END AS related_to_D
FROM Booking b
LEFT JOIN BookingDesc bd ON b.BookingID = bd.BookingID
GROUP BY b.BookingID;

原理是:对每个BookingID的所有Route记录,标记出含D的记录为1,否则为0,再用MAX取最大值——只要有一个1,就说明该BookingID存在含D的Route,最终转成Yes/No的结果。

方法二:EXISTS子查询判断

用EXISTS子查询直接检查当前BookingID是否有匹配的含D的Route记录,效率通常更高:

SELECT 
    BookingID,
    CASE 
        WHEN EXISTS (
            SELECT 1 
            FROM BookingDesc bd 
            WHERE bd.BookingID = b.BookingID 
              AND bd.Route LIKE '%D%'
        ) THEN 'Yes' 
        ELSE 'No' 
    END AS related_to_D
FROM Booking b;

EXISTS只要找到第一条匹配的记录就会停止查询,不用遍历该BookingID的所有Route,而且天然保证每个BookingID只返回一行结果。

你之前的SQL返回重复行,大概率是直接关联两张表后没有做分组或者去重操作,导致每个Route记录对应一行结果,上面两种方法都能解决这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:12:08