我想要具有相同列的UNION表,例如:
table1
id var1 var2
1 green red
2 blue NULL
table2
id var1 var2
2 NULL pink
3 red blue
我的结果应该是这样的:
id var1 var2
1 green red
2 blue pink
3 red blue
A"正常" UNION创建以下结果:
id var1 var2
1 green red
2 blue NULL
2 NULL pink
3 red blue
...有两个id = 2的条目,因为id = 2的两行不相同。但是,我想只有一行ID为2。
我目前的解决方法如下:
第1步
CREATE OR REPLACE VIEW temp AS
SELECT id FROM table1
UNION
SELECT id FROM table2;
第2步
SELECT t1.id, IFNULL(t2.var1, t3.var1) AS var1, IFNULL(t2.var2, t3.var2) AS var2
FROM temp AS t1
LEFT JOIN table1 AS t2 ON t1.id = t2.id
LEFT JOIN table2 AS t3 ON t1.id = t3.id;
我无法相信这是解决问题的最明智的方法,因为它是如此常见。当表格或变量的数量增加时,这是一个真正的痛苦。
感谢您提出任何明智的想法!
答案 0 :(得分:1)
这是使用not exists
的一种方式:
select id, var1, var2
from table1
union all
select id, var1, var2
from table2 t2
where not exists (
select 1
from table1 t1
where t1.id = t2.id
)
这是另一个outer join / null
支票:
select id, var1, var2
from table1
union all
select t2.id, t2.var1, t2.var2
from table2 t2
left join table1 t1 on t2.id = t1.id
where t1.id is null