2008-08-13 13 views
8

Angenommen, wir haben eine A-Tabelle:Bidirektionale äußere Verknüpfung

itemid mark 
1  5 
2  3 

und Tabelle B:

itemid mark 
1  3 
3  5 

Ich will A * B beitreten auf A.itemid = B.itemid rechts und links Wege. Ergebnis:

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

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

Antwort

6

Es ist eine vollständige äußere genannt beitreten und es ist nicht nativ in MySQL unterstützt, von seinem docs beurteilen. Sie können diese Einschränkung umgehen, indem Sie UNION verwenden, wie in den Kommentaren zu der Seite, mit der ich verlinkt bin, beschrieben.

[Bearbeiten] Da andere Snippets gepostet haben, gehen Sie hier. Sie können die Erklärung auf der verlinkten Seite sehen.

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 
2

konnte mit etwas Arbeit zu tun, aber hier ist eine 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; 

Dieses auf der linken Seite verlässt sich verbinden, die alle Zeilen in der ursprünglichen Tabelle zurück (in diesem Fall ist dies die subselect Tabelle T). Wenn in der verknüpften Tabelle keine Übereinstimmungen vorhanden sind, wird die Spalte auf NULL gesetzt.

-1

Dies funktioniert für mich auf SQL Server:

select isnull(a.id, b.id), a.mark, b.mark 
from a 
full outer join b on b.id = a.id 
+0

Frage explizit besagt, MySQL – cdeszaq

Verwandte Themen