You need to enable JavaScript to run this app. SQL如何实现左连接无匹配时回退关联Modifier为00的费率
优惠活动
大模型
产品
解决方案
定价
更多

SQL如何实现左连接无匹配时回退关联Modifier为00的费率

单条SQL实现带回退规则的费率关联查询

完全可以通过单条SQL实现需求,无需拆分两条语句执行。核心逻辑为优先匹配Procedure+Modifier双字段关联的精确费率,未匹配时自动回退取同Procedure下Modifier=00的基准费率。

推荐方案:两次左连+COALESCE取值(适配大数据量场景)

该方案关联效率更高,逻辑清晰:

  • 第一次左连费率表,通过Procedure + Modifier双字段匹配精确费率
  • 第二次左连费率表,固定匹配当前主表行同Procedure下Modifier=00的基准费率
  • 用COALESCE函数优先取第一次匹配到的非空值,未命中则自动取基准费率

假设主表名为main_tbl,费率表名为rates_tbl,对应SQL如下:

SELECT
  m.Procedure,
  m.Modifier,
  COALESCE(r_exact.Rate, r_default.Rate) AS Rate
FROM main_tbl m
-- 精确匹配双字段的费率
LEFT JOIN rates_tbl r_exact
  ON m.Procedure = r_exact.Procedure 
  AND m.Modifier = r_exact.Modifier
-- 关联取同Procedure下Modifier=00的基准费率
LEFT JOIN rates_tbl r_default
  ON m.Procedure = r_default.Procedure 
  AND r_default.Modifier = '00'

针对你提供的样例数据,该SQL的运行结果完全符合预期:

  • 主表AA/00行:精确匹配到$10,最终返回$10
  • 主表AA/21行:精确匹配到$20,最终返回$20
  • 主表AA/26行:无精确匹配结果(r_exact.Rate为null),自动取AA/00对应的$10基准费率

简洁实现方案:相关子查询(适配小数据量场景)

如果数据量较小,也可以直接在SELECT中嵌套子查询实现回退逻辑,写法更简洁:

SELECT
  m.Procedure,
  m.Modifier,
  COALESCE(
    -- 先尝试精确匹配双字段
    (SELECT r.Rate FROM rates_tbl r 
     WHERE r.Procedure = m.Procedure AND r.Modifier = m.Modifier),
    -- 未命中则回退取基准费率
    (SELECT r.Rate FROM rates_tbl r 
     WHERE r.Procedure = m.Procedure AND r.Modifier = '00')
  ) AS Rate
FROM main_tbl m

注意:如果费率表存在同一Procedure + Modifier的重复记录,建议提前对费率表去重后再关联,避免返回多行重复结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 03:15:02