2016-06-29 5 views
1

Ich möchte UNION Tabellen mit identischen Spalten, zB:MySQL UNION Tabellen, die von einem einzigen eindeutigen Feld

table1 
id  var1 var2 
1  green red 
2  blue NULL 

table2 
id  var1 var2 
2  NULL pink 
3  red  blue 

Mein Ergebnis so aussehen sollte:

id  var1 var2 
1  green red 
2  blue pink 
3  red  blue 

Ein „normaler“ UNION das schafft folgendes Ergebnis:

... mit zwei id = 2 Einträgen, da die zwei Zeilen mit id = 2 nicht identisch sind. Allerdings würde ich nur eine einzige Zeile mit der ID 2.

Meine aktuelle Problemumgehung haben, wie sich wie folgt:

Schritt 1

CREATE OR REPLACE VIEW temp AS 
SELECT id FROM table1 
UNION 
SELECT id FROM table2; 

Schritt 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; 

Ich kann nicht glauben, dass dies der klügste Weg ist, um das Problem zu lösen, da es so ein gemeinsames o ist ne. Und es ist ein echter Schmerz im Nacken, wenn die Anzahl der Tabellen oder Variablen zunimmt.

Danke für jede kluge Idee!

Antwort

1

Hier ist eine Möglichkeit, mit 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 
    ) 

Hier ist eine andere mit einem outer join/null-Check:

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 
+0

Vielen Dank! Leider kombiniert diese Lösung die Felder nicht. id 2 hat nur die Informationen in Tabelle1 gefunden. –

Verwandte Themen