MySQL UNION表由一个唯一的字段

时间:2016-06-29 17:08:02

标签: mysql union

我想要具有相同列的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;

我无法相信这是解决问题的最明智的方法,因为它是如此常见。当表格或变量的数量增加时,这是一个真正的痛苦。

感谢您提出任何明智的想法!

1 个答案:

答案 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