如何在SQL Server中用另一表匹配值更新表中的NULL值
用表B匹配值更新表A的NULL分组字段
我有表A,其中grouping列部分行值为NULL,需要通过id_col匹配表B,用表B对应的grouping值更新这些NULL项。
原始表A数据
| id_col | grouping |
|---|---|
| 001 | A |
| 002 | B |
| 003 | NULL |
| 004 | A |
| 005 | NULL |
| 006 | B |
表B数据
| id_col | grouping |
|---|---|
| 003 | A |
| 005 | B |
更新后期望的表A数据
| id_col | grouping |
|---|---|
| 001 | A |
| 002 | B |
| 003 | A |
| 004 | A |
| 005 | B |
| 006 | B |
解决方案
方法1:JOIN式更新(适配MySQL、PostgreSQL 9.2+、SQL Server)
UPDATE A JOIN B ON A.id_col = B.id_col SET A.grouping = B.grouping WHERE A.grouping IS NULL;
方法2:子查询式更新(通用多数SQL数据库)
UPDATE A SET grouping = ( SELECT B.grouping FROM B WHERE B.id_col = A.id_col ) WHERE A.grouping IS NULL AND EXISTS ( SELECT 1 FROM B WHERE B.id_col = A.id_col );
说明
- 两种方法仅更新表A中
grouping为NULL的行,不会覆盖已有有效值 EXISTS子句用于过滤掉表B中无匹配id_col的行,避免出现将NULL更新为NULL的无效操作
内容的提问来源于stack exchange,提问作者SteP
相关产品推荐
相关产品推荐

