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

基于关联主表code更新Table2中plant列的SQL语句求助

问题:关联主表更新子表字段值

现有两张表,Table1(主表)包含code字段及对应的plant字段;Table2包含业务数据,其code字段与Table1的code字段一致,需以code为关联依据,将Table2的plant字段更新为Table1中对应的值。尝试了以下UPDATE语句但无法正常运行,请求修正:

UPDATE TABLE_B B
SET B.PLANT = CASE
                  WHEN (B.CODE IN (SELECT CODE  FROM TABLE_A A))
                      THEN A.PLANT 
                      ELSE NULL
              END;

表结构及数据

Table1(主表)

codeplant
A00130009
B00130018
C00130006

Table2

DATECODEPLANT
2024-09-03A001
2024-09-03B001
2024-09-03C001
2024-09-04A001
2024-09-04C001
2024-09-05A001
2024-09-06B001
2024-09-06A001
2024-09-06C001

原语句问题分析

原SQL的核心问题是:CASE语句中引用的A.PLANT无法关联到外层的Table2记录——子查询SELECT CODE FROM TABLE_A A仅判断code是否存在,但未建立B.CODE与A.CODE的一对一匹配,导致数据库无法确定要取哪条Table1的plant值。

修正后的SQL语句

根据不同数据库类型,提供对应的正确写法:

MySQL/MariaDB

UPDATE Table2 B
JOIN Table1 A ON B.code = A.code
SET B.plant = A.plant;

Oracle

仅更新存在匹配的记录:

UPDATE Table2 B
SET B.plant = (SELECT A.plant FROM Table1 A WHERE A.code = B.code)
WHERE EXISTS (SELECT 1 FROM Table1 A WHERE A.code = B.code);

若需将无匹配的plant设为NULL(与原需求的ELSE NULL逻辑一致),去掉WHERE条件即可:

UPDATE Table2 B
SET B.plant = (SELECT A.plant FROM Table1 A WHERE A.code = B.code);

SQL Server

UPDATE B
SET B.plant = A.plant
FROM Table2 B
INNER JOIN Table1 A ON B.code = A.code;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 08:15:23