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

如何使符合条件的SQL记录生成两条含不同city_code的重复结果

解决SQL中UAE城市拆分两条记录的需求

问题分析

原SQL的CASE WHEN逻辑存在两个核心问题:一是CASE语句只能返回单个值,无法实现单条记录拆分为两条的需求;二是条件顺序错误——T2.city = 'uae'属于T2.city IS NOT NULL的子集,原逻辑中第二个条件永远不会被触发。要实现需求,需要将数据拆分为两个分支处理后合并:

  1. 对T2.city = 'uae'的记录,通过交叉连接包含'U'和'E'的临时集合生成两条记录
  2. 对其他记录,按正常逻辑返回city_code

实现代码

-- 处理UAE场景:生成两条仅city_code不同的重复记录
SELECT 
    T1.name,
    T1.adrs,
    T1.state,
    code.city_code
FROM DB.TABLE1 T1
LEFT JOIN DB.TABLE2 T2 ON T1.SK = T2.SK
CROSS JOIN (SELECT 'U' AS city_code UNION ALL SELECT 'E') code
WHERE T2.city = 'uae'

UNION ALL

-- 处理非UAE的正常场景
SELECT 
    T1.name,
    T1.adrs,
    T1.state,
    CASE 
        WHEN T2.city IS NOT NULL THEN T2.city
        ELSE T1.state  -- 原逻辑中T2.state可能为NULL(LEFT JOIN场景下T2无匹配时),建议根据业务实际调整为T1.state或默认值
    END AS city_code
FROM DB.TABLE1 T1
LEFT JOIN DB.TABLE2 T2 ON T1.SK = T2.SK
WHERE T2.city != 'uae' OR T2.city IS NULL;

关键说明

  • 使用UNION ALL而非UNION,避免重复数据校验,提升查询性能
  • 临时集合(SELECT 'U' AS city_code UNION ALL SELECT 'E')用于为每条UAE记录生成两个目标city_code值
  • 修正了原逻辑的条件顺序问题,确保分支逻辑正确触发
  • 针对LEFT JOIN后T2无匹配的场景,将原逻辑的else T2.state调整为else T1.state(可根据实际业务需求修改),避免返回NULL值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:22:39