2013-05-09 7 views
57

Ist es möglich, Join-Abfrage ohne ON Anweisung zu schreiben? und wie unterscheiden sich diese Joins LEFT JOIN, RIGHT JOIN funktioniert.Wie verwende ich mysql JOIN ohne ON-Bedingung?

+0

Da die ON-Klausel dem Server mitteilt, wie die Tabellen verwandt sind, nein. Wenn Ihre verschiedenen Join-Typen alle dasselbe Ergebnis liefern, tun Sie es irgendwie falsch, und das Hinzufügen von Code könnte uns helfen, Ihr Problem zu erkennen. In der Zwischenzeit gehen Sie zu [Jeff Atwoods Blog] (http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html) für ein 2-minütiges Intro auf die verschiedene Join-Typen. – fvu

Antwort

84

MySQL documentation behandelt dieses Thema.

Hier ist eine Zusammenfassung. Bei Verwendung von join oder inner join ist die Bedingung on optional. Dies unterscheidet sich vom ANSI-Standard und unterscheidet sich von fast jeder anderen Datenbank. Der Effekt ist ein cross join. Ähnlich können Sie eine on-Klausel mit cross join verwenden, die sich ebenfalls von Standard-SQL unterscheidet.

Eine Kreuzverbindung erzeugt ein kartesisches Produkt - dh jede mögliche Kombination von 1 Reihe aus der ersten Tabelle und 1 Reihe aus der zweiten Tabelle. Der Kreuz-Join für eine Tabelle mit drei Zeilen ('a', 'b' und 'c') und eine Tabelle mit vier Zeilen (zB 1, 2, 3, 4) würde 12 Zeilen haben.

In der Praxis, wenn Sie ein Cross-Join tun wollen, dann verwenden cross join:

from A cross join B 

ist viel besser als:

from A, B 

und:

from A join B -- with no on clause 

Die on Für einen rechten oder linken äußeren Join ist eine Klausel erforderlich, sodass die Diskussion nicht relevant ist für Sie.

Wenn Sie die verschiedenen Arten von Joins verstehen müssen, dann müssen Sie etwas über relationale Datenbanken lernen. Stackoverflow ist kein geeigneter Ort für diese Diskussionsebene.

2

Vielleicht möchten Sie auch die Verwendung von UNION zu untersuchen, die mehrere Tabellen kombiniert für eine Ausgabe: SQL - Combine two tables for one output

+0

Wie ist das überhaupt relevant für die Frage des OP? –