如何用Netezza SQL找出两表非共有行并标记来源
Netezza SQL实现两表非共有行筛选并标记来源
可以用**全外连接(FULL OUTER JOIN)**结合CASE WHEN语句实现需求,具体SQL写法如下:
SELECT COALESCE(t1.id, t2.id) AS id, COALESCE(t1.var1, t2.var1) AS var1, CASE WHEN t1.id IS NOT NULL THEN 'table1' ELSE 'table2' END AS source FROM table1 t1 FULL OUTER JOIN table2 t2 ON t1.id = t2.id WHERE t1.id IS NULL OR t2.id IS NULL;
代码说明:
FULL OUTER JOIN:基于id列关联两张表,保留两表所有行。匹配成功的行两边都有数据,未匹配的行其中一侧为NULL。COALESCE:取非NULL的id和var1值——因为非共有行必然只有一张表有数据,用这个函数直接提取有效内容。CASE WHEN:通过判断哪张表的id不为NULL,标记该行的来源表。WHERE子句:筛选出仅一侧有数据的行,也就是两表id不共有的记录。
执行后会得到你期望的结果:
id var1 source 1 3 5 table1 2 4 7 table2
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

