如何在Teradata中合并两个含缺失值的表以得到指定结果
Teradata合并含缺失值的表实现方法
针对你给出的两个表,要实现按id合并并优先保留非空name的需求,有两种常用的Teradata实现方式:
方法一:FULL JOIN + COALESCE函数
通过全连接关联两个表的id字段,再用COALESCE函数依次取两个表中name的非空值(如果第一个表的name非空就用它,否则用第二个表的,都为空则返回NULL)。
假设两个表分别名为table_a和table_b,SQL语句如下:
SELECT COALESCE(a.id, b.id) AS id, COALESCE(a.name, b.name) AS name FROM table_a a FULL JOIN table_b b ON a.id = b.id;
FULL JOIN确保所有id都被保留,不管在哪个表中存在COALESCE函数会返回参数列表中第一个非NULL的值,正好满足优先取非空name的需求
方法二:UNION ALL + GROUP BY聚合
先把两个表的所有行合并,再按id分组,用聚合函数(比如MAX)提取非空的name值(聚合函数会自动忽略NULL值)。
SQL语句如下:
SELECT id, MAX(name) AS name FROM ( SELECT id, name FROM table_a UNION ALL SELECT id, name FROM table_b ) combined GROUP BY id;
UNION ALL会保留两个表的所有行(包括重复的id行)- 外层按
id分组后,MAX(name)会自动选取该id下所有非空的name值;如果所有name都是NULL,结果就是NULL
这两种方法都能得到你想要的合并结果,可根据实际表数据量和性能需求选择。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

