如何使用结构差异较大的Table B更新Table A中的Age字段?
解决方案:通过Table B更新Table A的Age字段
要实现用Table B的Age字段值覆盖Table A中对应记录的Age字段(其余字段保留不变),核心是通过Name、Class、Subject、Marks这四个字段匹配两张表的对应记录(注:原描述中提到主键包含Age,但因Age是待更新字段,无法作为匹配条件,实际需用前四个字段关联)。以下是主流数据库的实现SQL:
MySQL
使用UPDATE JOIN语法直接关联更新:
UPDATE TableA a JOIN TableB b ON a.Name = b.Name AND a.Class = b.Class AND a.Subject = b.Subject AND a.Marks = b.Marks SET a.Age = b.Age;
SQL Server
通过UPDATE FROM实现关联更新:
UPDATE a SET a.Age = b.Age FROM TableA a INNER JOIN TableB b ON a.Name = b.Name AND a.Class = b.Class AND a.Subject = b.Subject AND a.Marks = b.Marks;
Oracle
提供两种写法,优先推荐MERGE语句:
方式1:MERGE语句
MERGE INTO TableA a USING TableB b ON ( a.Name = b.Name AND a.Class = b.Class AND a.Subject = b.Subject AND a.Marks = b.Marks ) WHEN MATCHED THEN UPDATE SET a.Age = b.Age;
方式2:UPDATE子查询
UPDATE TableA a SET a.Age = ( SELECT b.Age FROM TableB b WHERE a.Name = b.Name AND a.Class = b.Class AND a.Subject = b.Subject AND a.Marks = b.Marks ) WHERE EXISTS ( SELECT 1 FROM TableB b WHERE a.Name = b.Name AND a.Class = b.Class AND a.Subject = b.Subject AND a.Marks = b.Marks );
执行以上SQL后,Table A的Age字段会与Table B对应记录的Age保持一致,Address、City等其他字段不受影响。
内容的提问来源于stack exchange,提问作者user22094638
相关产品推荐
相关产品推荐

