Frage

Angenommen, wir haben eine Tabelle A:

itemid mark
1      5
2      3

und Tabelle B:

itemid mark
1      3
3      5

Ich möchte A*B auf A.itemid=B.itemid sowohl rechts als auch links verbinden.d.h.Ergebnis:

itemid A.mark B.mark
1      5      3
2      3      NULL
3      NULL   5

Gibt es eine Möglichkeit, dies in einer Abfrage in MySQL zu tun?

War es hilfreich?

Lösung

Es wird als vollständiger Outer-Join bezeichnet und wird von MySQL nicht nativ unterstützt Dokumente.Sie können diese Einschränkung mithilfe von UNION umgehen, wie in den Kommentaren zu der Seite beschrieben, auf die ich verlinkt habe.

[Bearbeiten] Da andere Ausschnitte gepostet haben, bitte los.Die Erklärung finden Sie auf der verlinkten Seite.

SELECT *
FROM A LEFT JOIN B ON A.id = B.id
UNION ALL
SELECT *
FROM A RIGHT JOIN B ON A.id = B.id
WHERE A.id IS NULL

Andere Tipps

Könnte etwas Arbeit gebrauchen, aber hier ist etwas SQL

select distinct T.itemid, A.mark as "A.mark", B.mark as "B.mark"
    from (select * from A union select * from B) T 
    left join A on T.itemid = A.itemid 
    left join B on T.itemid = B.itemid;

Dies basiert auf dem linken Join, der alle Zeilen in der Originaltabelle zurückgibt (in diesem Fall ist dies die Unterauswahltabelle T).Wenn in der verknüpften Tabelle keine Übereinstimmungen vorhanden sind, wird die Spalte auf NULL gesetzt.

Das funktioniert bei mir auf SQL Server:

select isnull(a.id, b.id), a.mark, b.mark
from a 
full outer join b on b.id = a.id
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top