Ich möchte eine [vollständige äußere Verknüpfung](https://en.wikipedia.org/wiki/Join(SQL)#Full_outerjoin) in MySQL. Ist dies möglich? Ist eine vollständige äußere Verknüpfung von MySQL unterstützt?
Können wir es verwenden? wie zum Beispiel: SELECT * FROM leftTable lt LEFT JOIN rightTable rt ON lt.id = rt.lrid UNION SELECT lt.*, rl.* -- Zum Abgleichen der Spaltenmenge FROM leftTable lt RIGHT JOIN rightTable rt ON lt.id = rt.lrid;
4 Stimmen
Mögliche Duplikate von MySQL Voller äußerer Join Syntaxfehler
4 Stimmen
Auf diese Frage gibt es bessere Antworten
6 Stimmen
Achten Sie auf die Antworten hier. Der SQL-Standard besagt, dass full join on inner join on rows union all unmatched left table rows extended by nulls union all right table rows extended by nulls ist. Die meisten Antworten hier sind falsch (siehe die Kommentare) & die, die nicht falsch sind, behandeln den allgemeinen Fall nicht. Auch wenn es viele (ungerechtfertigte) Upvotes gibt. (Siehe meine Antwort.)
0 Stimmen
Wie sieht es aus, wenn Sie versuchen, nach nicht primären Schlüsseln/gruppierten Spalten zu verknüpfen? z. B. habe ich eine Abfrage der Verkäufe pro Staat "Staat", "Verkäufe" und eine andere der Ausgaben pro Staat "Staat", "Ausgaben", beide Abfragen verwenden group by("Staat"). Wenn ich die Vereinigung zwischen den linken und rechten Verknüpfungen zwischen zwei Abfragen mache, erhalte ich ein paar Zeilen mit Verkäufen, aber keine Ausgaben, ein paar mehr mit Ausgaben, aber keine Verkäufe, alles richtig bis zu diesem Punkt, aber ich erhalte auch ein paar mit sowohl Verkäufe und Ausgaben und eine wiederholte Spalte "Staat"... nicht viel von einem Problem, aber fühlt sich nicht richtig an...
1 Stimmen
@JairoLozano Constraints sind für die Abfrage nicht erforderlich. Obwohl, wenn Constraints gelten, liefern zusätzliche Abfragen die gewünschte Antwort, die sonst nicht gegeben würde. Constraints haben keinen Einfluss darauf, was ein vollständiger Join on für gegebene Argumente zurückgibt. Das von Ihnen beschriebene Problem besteht darin, dass die von Ihnen geschriebene Abfrage die falsche Abfrage ist. (Vermutlich handelt es sich um den häufigen Fehler, dass Leute einige Joins, die möglicherweise jeweils einen anderen Schlüssel beinhalten, von einigen Unterabfragen, die möglicherweise jeweils einen Join und/oder eine Aggregation beinhalten, wollen, aber fälschlicherweise versuchen, den gesamten Join und dann die gesamte Aggregation durchzuführen oder über frühere Aggregationen zu aggregieren).
4 Stimmen
Alle Antworten, die UNION anstelle von UNION ALL verwenden, sind falsch. Alle Antworten mit Unterabfragen oder 3 vereinigten Selects sind ineffizient. Richtige Antworten führen einen Union All eines Left Join mit einem Select aus der zweiten Tabelle mit einem Where Not Exists in der ersten Tabelle durch (oder den entsprechenden Outer Join + Where = NULL Bedingung).
0 Stimmen
Einige der Inhalte hier sind Gegenstand der Metafrage Wie sollte ich mit einer falschen Antwort umgehen, die akzeptiert wird und viele positive Bewertungen hat? .