如何用第二张表填充null值且保留原表其他数据?
解决方案:用COALESCE填充NULL值并保留原表数据
核心思路是通过LEFT JOIN关联两张表,再用COALESCE函数优先保留Table A的非NULL值,仅当Table A对应字段为NULL时,用Table B的对应值填充。
正确SQL代码
SELECT a.name, COALESCE(a.dept, b.dept) AS dept, a.job FROM table_a AS a LEFT JOIN table_b AS b ON a.name = b.name;
代码说明
COALESCE(a.dept, b.dept):依次检查参数,返回第一个非NULL的值。对于mark和cindy,Table A的dept是retail(非NULL),所以直接保留;对于jon、mary、lucy,Table A的dept为NULL,就会取Table B中对应的dept值。LEFT JOIN确保Table A的所有行都被保留,即使Table B中没有匹配的记录。
执行结果
| name | dept | job |
|---|---|---|
| jon | hr | analyst |
| mary | hr | supervisor |
| lucy | finance | actuary |
| mark | retail | manager |
| cindy | retail | sales |
如果后续需要填充其他字段(比如job字段),同样可以用COALESCE处理,例如COALESCE(a.job, b.job) AS job,按需调整即可。
内容的提问来源于stack exchange,提问作者Dustin
相关产品推荐
相关产品推荐

