如何通过关联表填充主表中为空字符串而非NULL的地址列
实现空地址填充的SQL方案
针对你需要处理空字符串而非NULL值的需求,优先判断主表Address字段是否为空,再通过Postcode关联映射表替换值即可,不同使用场景的语法如下:
场景1:仅查询返回填充后结果(不修改原表数据)
使用LEFT JOIN关联两张表的Postcode字段,通过CASE判断主表地址是否为空,为空则取映射表的地址,否则保留原值:
SELECT CASE WHEN TRIM(m.Address) = '' THEN a.Address -- 同时兼容空字符串、全空格的空白值场景 ELSE m.Address END AS Address, m.PostTown, m.Postcode FROM main_table m LEFT JOIN postcode_address_mapping a ON m.Postcode = a.postcode;
如果使用支持IF函数的SQL dialect(如MySQL、Spark SQL等),可以简化为:
SELECT IF(TRIM(m.Address) = '', a.Address, m.Address) AS Address, m.PostTown, m.Postcode FROM main_table m LEFT JOIN postcode_address_mapping a ON m.Postcode = a.postcode;
场景2:直接更新主表存储的Address字段(修改原表数据)
如果需要将填充结果永久写入主表,可使用UPDATE关联写法,不同数据库语法略有差异:
MySQL写法:
UPDATE main_table m LEFT JOIN postcode_address_mapping a ON m.Postcode = a.postcode SET m.Address = a.Address WHERE TRIM(m.Address) = '';
PostgreSQL写法:
UPDATE main_table m SET Address = a.Address FROM postcode_address_mapping a WHERE m.Postcode = a.postcode AND TRIM(m.Address) = '';
注意事项
如果你的空地址确定都是长度为0的纯空字符串,不需要处理全空格的空白值,可以去掉TRIM()函数,进一步提升查询/更新效率。
内容的提问来源于stack exchange,提问作者Mizanur Choudhury
相关产品推荐
相关产品推荐

