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

SQL左连接匹配城市,无匹配时使用默认值的实现方法

正确实现方案

你的原SQL逻辑错误,原因是LEFT JOIN中无匹配时V表字段为NULL,COALESCE(V.city = F.city, V.city="Default")的两个条件都会返回NULL,无法关联到Default记录,导致未匹配城市的Value为空。以下是两种可行的解决方法:

方法1:LEFT JOIN + 子查询取默认值

通过LEFT JOIN匹配城市,再用COALESCE将空值替换为Default对应的Value:

SELECT 
    F.ID, 
    F.City, 
    COALESCE(V.Value, (SELECT Value FROM V WHERE City = 'Default')) AS Value
FROM F
LEFT JOIN V ON V.City = F.City;

该方法适用于V表中仅存在一条Default记录的场景(符合你的需求),子查询会直接返回默认值。

方法2:两次LEFT JOIN关联

分别关联匹配城市的记录和Default记录,再用COALESCE优先取匹配值,无匹配则用默认值:

SELECT 
    F.ID, 
    F.City, 
    COALESCE(V_match.Value, V_default.Value) AS Value
FROM F
LEFT JOIN V V_match ON V_match.City = F.City
LEFT JOIN V V_default ON V_default.City = 'Default';

这种方式无需子查询,逻辑更直观,同样适用于单条Default记录的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:19:58