17

結合に関するMySQLのドキュメントで、同僚が今日この宝石を私に指摘しました。

RIGHT JOINと同様に機能しLEFT JOINます。データベース間でコードを移植できるようにするLEFT JOINには、の代わりにを使用することをお勧めしますRIGHT JOIN

誰かがこれに光を当てることができますか?これはおそらく過去の時代の名残であると私は思います-おそらくドキュメントは「コードを以前のバージョンのMySQLと下位互換性を保つために...」と言っているようです。

サポートしていない最新のRDBMSはありRIGHT JOINますか?これRIGHT JOINはシンタックスシュガーオーバーLEFT JOINであり、いずれRIGHT JOINもとして表現できLEFT JOINますが、その方向にクエリを作成すると読みやすさが低下する場合があります。

このアドバイスはまだ現代的で有効ですか?避けるべき説得力のある理由はありRIGHT JOINますか?

4

3 に答える 3

27

SQLiteをサポートしていないSQLエンジンが少なくとも1つありRIGHT JOINます。おそらくそれが互換性が懸念事項として挙げられた理由です。他のSQLエンジンも存在する可能性があります。

于 2012-07-11T19:08:27.873 に答える
1

したがって、RIGHTJOINとLEFTJOINは、通常のSQLエンジンで同じアクションを実行します。LEFT JOIN table ato tableは、存在するかどうかに関係なく、bすべてを返します。RIGHT JOIN table to tableは、存在するかどうかに関係なく、すべてを返します。クエリを最適化する前は、LEFTキーワードとRIGHTキーワードは、どのテーブルで実行されるアクションのみを参照します。MySQLオプティマイザは常にクエリを正規化し、JOINを効果的にLEFTJOINにします。したがって、RIGHTの代わりにLEFT JOINを使用するようにクエリを作成すると、オプティマイザのコストが低くなります。ababba

于 2012-07-12T21:50:28.147 に答える
-1

これは賢明な慣習であるため、後で読む可能性のある人(重要なことは自分自身を含む)に明確な、または通常とは異なる何かを表現したい場合を除いて、これを優先する必要があります。

あなたの質問は有効ですが、それを完了するには次のいずれかが必要です。

1)RIGHT JOINが機能しない、または大幅な違いがある場合の反例

-また-

2)そのようなケースが存在しないことの証明:1

これらは手に入れるのが難しいと思います。執筆が可能であるため、アドバイスが非推奨になっている可能性があるというあなたの提案。また、複数のデータベースバックエンドをサポートするMySQLのしわが原因である可能性もあります。おそらくそのうちの1つはRIGHTJOINに不寛容ですか?

于 2012-07-11T19:03:35.523 に答える