2012-01-26 3 views
5
SELECT title,name FROM Lessons,Users WHERE Lessons.author = Users.email; 

これらの3つのMySQLクエリの違いは何ですか?

SELECT title,name FROM Lessons JOIN Users ON Lessons.author = Users.email; 

SELECT title,name FROM Lessons INNER JOIN Users ON Lessons.author = Users.email; 

レッスンUsers.emailへの外部キーとしてインデックスauthorという名前の列があります。 titleは、3つの文の間に違いはありませんLessonsnameの列がUsers

+0

:http://stackoverflow.com/questions/894490/sql-left-join-vs-multiple-tables-on-from-line – jzila

+0

違いは単なるスタイルであり、 – onedaywhen

答えて

12

の列であり、それらはすべて、暗黙的または明示的のどちらかである、INNER JOIN

  1. 最初の文は使用しています暗黙の古い結合構文。これは引き続きサポートされていますが、明示的な結合を使用すると読みやすく保守性が向上します。古いスタイルの結合は使用しないでください。

  2. 2番目のステートメントは、の明示的な結合を使用して、結合のタイプを指定しません。デフォルトでは、これはINNER JOIN

  3. で3番目のステートメントは、明示的なに参加し、任意のあいまいさを回避しています。これは、ジョインを書くのに最も推奨される方法です。

1

完璧な冪等があるだけでなく、別の方法があるかもしれません。 たとえば、Lesson.emailのLessons.authorの名前を変更して、関連する列の名前が2つの表に同じであることを確認するには、NATURAL JOINを使用します。共有同じ名前:私はこれがこの質問に対処していると信じ

-- After renaming Lessons.author in Lessons.email, you simply use NATURAL JOIN 
SELECT title,name FROM Lessons NATURAL JOIN Users; 
関連する問題