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

SQL中用LEFT OUTER JOIN与UNION添加多字段失败的问题求助

解决SQL新增variable2字段的正确方法

你用UNION ALL的方式是错误的——UNION ALL是将两个查询的结果行合并,不会新增列,只会把分别带variable1和variable2的两行数据叠在一起,所以你看到的是重复的类似variable1的结果。

下面是两种正确的实现方式:

方法一:两次LEFT JOIN关联tb2(适合单id对应单条目标数据的场景)

给tb2起不同的别名,分别对应variable1和variable2的筛选条件,就能在同一行获取两个字段的值:

SELECT  
    tb1.id, 
    tb1.start, 
    tb1.end, 
    tb1.name, 
    tb1.code, 
    ROUND(Try_cast(tb2a.Value as float), 0) AS variable1,
    ROUND(Try_cast(tb2b.Value as float), 0) AS variable2
FROM    
    tb1 
LEFT OUTER JOIN tb2 tb2a 
    ON tb1.id = tb2a.ID AND tb2a.Descript LIKE '%Something%'
LEFT OUTER JOIN tb2 tb2b 
    ON tb1.id = tb2b.ID AND tb2b.Descript LIKE '%AnotherThing%' -- 替换为variable2对应的筛选条件
WHERE     
    tb1.start >= 0 -- 修正原代码中可能的笔误:tb1.star应为tb1.start
ORDER BY tb1.id; -- 补全排序字段

方法二:条件聚合(适合单id对应多条tb2数据的场景,避免结果行重复)

通过CASE WHEN筛选对应条件的Value,配合聚合函数确保每个id只返回一行:

SELECT  
    tb1.id, 
    tb1.start, 
    tb1.end, 
    tb1.name, 
    tb1.code, 
    ROUND(Try_cast(MAX(CASE WHEN tb2.Descript LIKE '%Something%' THEN tb2.Value END) as float), 0) AS variable1,
    ROUND(Try_cast(MAX(CASE WHEN tb2.Descript LIKE '%AnotherThing%' THEN tb2.Value END) as float), 0) AS variable2
FROM    
    tb1 
LEFT OUTER JOIN tb2 
    ON tb1.id = tb2.ID
WHERE     
    tb1.start >= 0
GROUP BY 
    tb1.id, tb1.start, tb1.end, tb1.name, tb1.code
ORDER BY tb1.id;

注意事项

  • 原代码中的tb1.star大概率是tb1.start的笔误,记得修正
  • 将代码中的%AnotherThing%替换为你实际需要的variable2对应的Descript筛选规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 20:26:11