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?
Antwort
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.
Sehen Sie einige Beispiele in http://www.sitepoint.com/understanding-sql-joins-mysql-database/
können Sie anstelle von ‚ON‘ ‚weiter verwenden‘, wie in der Abfrage
SELECT * FROM table1 LEFT JOIN table2 USING (id);
Für zusätzliche Klärung muss die Verbindungsspalte in beiden Tabellen identisch benannt werden, damit USING funktioniert – rmirabelle
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
Wie ist das überhaupt relevant für die Frage des OP? –
- 1. Wie verwende ich OData Expand wie einen SQL-Join?
- 2. Wie verwende ich MySQL Found_Rows() in PHP?
- 3. Wie verwende ich MySQL Prepared Statement Caching?
- 4. Wie verwende ich react.js ohne Bundler?
- 5. Wie verwende ich DateTime ohne RE?
- 6. Wie verwende ich Formularauthentifizierung ohne Login-Kontrolle?
- 7. Wie verwende ich DrawString ohne Trimmen?
- 8. Wie verwende ich eine IF-Anweisung in einer MySQL-Join-Abfrage?
- 9. Wie verwende ich MySQL Join, um Forum-Threads nach ihrer letzten Antwort zu sortieren?
- 10. mysql Query Join/Inner Join
- 11. MySQL INNER JOIN - '=' vs 'wie'
- 12. mysql Join-Abfrage Problem
- 13. mysql Außen LEFT JOIN
- 14. mysql: multiple Join Problem
- 15. Wie kann ich FULL JOIN mehrfach in MySQL replizieren?
- 16. MySQL JOIN zwei Tabellen
- 17. Wie verwende ich MySQL C++ Connector zum Speichern binärer Daten?
- 18. Wie verwende ich den linken äußeren Join nach dem linken Join für diese Tabellen?
- 19. MySQL: Wie sortiere ich, wenn ich concat in group_concat verwende?
- 20. Wie verwende ich Union innerhalb while? (SQL)
- 21. MySQL Kreuztabelle Query Join
- 22. MySQL JOIN mit SUM
- 23. Mysql inner Join mit Nullen in Join
- 24. mysql LEFT JOIN
- 25. Mysql Join mit Limit?
- 26. mySQL mehrere INNER JOIN
- 27. MySQL Inner Join Update
- 28. mysql - Grenze links Join
- 29. Mysql Tabelle innerhalb Join
- 30. Hibernate ohne Create join()
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