Mysqls mangelnder direkter äußerer Join -Unterstützung und Problemumgehungen
Die Frage: Bietet MySQL einen nativen vollem äußeren Join, so dass alle Zeilen aus beiden zusammengefügten Tabellen unabhängig von den passenden Kriterien enthalten sind?
Die Antwort: Nein, MySQL unterstützt keine vollständigen Außenverbindungen. Wir können diese Funktionalität jedoch mithilfe alternativer Techniken effektiv replizieren.
Ansatz 1: Nutzung der Gewerkschaft
Dieser Ansatz ist geeignet, wenn kein Risiko besteht, dass die Ausgabe doppelte Zeilen erzeugt. Die Abfrage kombiniert ein LEFT JOIN
und ein RIGHT JOIN
mit UNION
:
<code class="language-sql">SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id UNION SELECT * FROM t1 RIGHT JOIN t2 ON t1.id = t2.id;</code>
Ansatz 2: Einsatz von Union alle mit Anti-Join
Für Szenarien, in denen doppelte Zeilen möglich sind, ist eine robustere Methode erforderlich. Dies beinhaltet die Verwendung von UNION ALL
zusammen mit einem Anti-Join, um Redundanz zu beseitigen:
<code class="language-sql">SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id UNION ALL SELECT * FROM t1 RIGHT JOIN t2 ON t1.id = t2.id WHERE t1.id IS NULL;</code>
Das Anti-Join (WHERE t1.id IS NULL
im RIGHT JOIN
-Teil) filtert Duplikate, bevor der Operation UNION ALL
die Ergebnisse kombiniert. Dies sorgt für eine vollständige und genaue Nachahmung eines vollem äußeren Join.
Das obige ist der detaillierte Inhalt vonUnterstützt MySQL Full Outer Joins?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!