2009-05-13 10 views
1

OK, also habe ich zwei Tabellen (Ansichten tatsächlich), die beide die gleiche Struktur haben. Jeder hat eine Spalte mit einem Datum und einer Spalte mit einem numerischen Wert.Wie füge ich zwei teilweise überlappende Listen in MySQL zusammen?

Die Daten in beiden Tabellen sind fast durchgehend und decken den gleichen Zeitraum ab. Die Daten sind folglich weitgehend gleich, aber ein Datum in einer Tabelle erscheint möglicherweise nicht in dem anderen.

Ich möchte eine Tabelle mit einer Datumsspalte und zwei numerischen Spalten haben. Wenn in einer Tabelle kein Datum vorhanden ist, sollte das entsprechende numerische Feld Null sein.

Irgendwelche Ansätze da draußen?


PS Dies ist nicht die gleiche Frage: How can I merge two MySQL tables?

Antwort

2

VladiatOr ‚s-Lösung kann.

SELECT t1.td, t1.val as val1, t2.val as val2 
    FROM table1 as t1 
    LEFT JOIN table2 as t2 
    ON t1.td = t2.td 
UNION 
SELECT t2.td, t1.val as val1, t2.val as val2 
    FROM table2 as t2 
    LEFT JOIN table1 as t1 
    ON t2.td = t1.td 
WHERE t1.td IS NULL 

Siehe auch den Kommentar von Tobias Riemenschneider im MySQL Reference on JOIN Syntax.

+0

Guter Anruf, funktioniert wie ein Charme. Ich habe jetzt eine epische Sammlung von Ansichten ... =) –

1

Diese Abfrage ist ein Zusammenschluss von drei Abfragen: Die erste die Datensätze schließt sich die in beiden Tabellen gemeinsam sind. Die zweite fügt diejenigen hinzu, die nur in Tabelle1 existieren. Die dritte fügt die Datensätze hinzu, die nur in Tabelle2 enthalten sind. indem er die erste Teil Auswahl Datensätze in beide, und nur in der ersten Tabelle und dann verkürzt werden, indem nur diejenigen, die in der zweiten Tabelle

SELECT t1.td, t1.val as val1, t2.val as val2 
FROM table1 as t1, table2 as t2 
WHERE t1.dt = t2.dt 
UNION 
SELECT t1.td, t1.val as val1, null as val2 
FROM table1 as t1 
LEFT JOIN table2 as t2 
ON t1.td = t2.td 
WHERE t2.td IS NULL 
UNION 
SELECT t2.td, null as val1, t2.val as val2 
FROM table2 as t2 
LEFT JOIN table1 as t1 
ON t2.td = t1.td 
WHERE t1.td IS NULL 
Verwandte Themen