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

请求:关联Sales与Transaction表,用CASE WHEN更新INDICATOR列的SQL语句

关联Transaction表更新Sales表INDICATOR列的正确SQL写法

原SQL语句的关联更新语法不符合主流数据库的规范,不同数据库的关联更新写法有差异,下面分几种常用数据库给出修正后的代码:

MySQL/MariaDB 版本

用JOIN直接关联两张表进行更新:

UPDATE Sales a
JOIN Transaction t ON a.id = t.id AND a.date <= t.date
SET a.indicator = 
    CASE 
        WHEN a.retail_value >= t.selling_price THEN 'Y'
        WHEN a.retail_value < t.selling_price THEN 'N'
        ELSE NULL 
    END;

SQL Server 版本

调整FROM子句的位置,确保语法符合SQL Server规范:

UPDATE a
SET a.indicator = 
    CASE 
        WHEN a.retail_value >= t.selling_price THEN 'Y'
        WHEN a.retail_value < t.selling_price THEN 'N'
        ELSE NULL 
    END
FROM Sales a
INNER JOIN Transaction t ON a.id = t.id AND a.date <= t.date;

Oracle 版本

Oracle不支持UPDATE ... FROM语法,推荐用MERGE语句实现关联更新:

MERGE INTO Sales a
USING Transaction t
ON (a.id = t.id AND a.date <= t.date)
WHEN MATCHED THEN
    UPDATE SET a.indicator = 
        CASE 
            WHEN a.retail_value >= t.selling_price THEN 'Y'
            WHEN a.retail_value < t.selling_price THEN 'N'
            ELSE NULL 
        END;

注意事项

如果单条Sales记录对应多条Transaction记录,上面的语句会随机选取一条匹配的记录来更新。如果需要按特定逻辑(比如取每个id对应的最新Transaction记录)更新,需要额外筛选关联条件,比如通过子查询先获取每个id的最新交易日期,再关联更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:40:33