質問: SQLの左外部結合で質問です。 結果で出されるレコードの順番の法則が分かりません。 画像の例であればusersのidが1,2,3,4の順に並ぶ結果になると思ったのですが、実際には3,1,2,4という結果になります。 ですので以下の法則だ自分なりに解釈しました 1ON句で指定した列について右側のテーブルからレコードを順に書く 2ON句で指定した列について左側のテーブルからレコードを順に見る 左側のテーブルにないレコードは1から消す 左側のテーブルにあって右側のテーブルにもあるやつはそのまま 左側のテーブルにあって右側のテーブルにないやつは1に加える しかし、上記の法則に当てはまらない物もあったので、左外部結語の仕組みの詳細を知りたいです。よろしくお願い致します。 画像のURL 法則の当てはまらない例https://qiita.com/hogehoge1234/items/6c1ca18297f473179173
回答: すでに適切な回答があるので蛇足ですが・・・ 外部結合などの要因がなくても「順序」は不定なのがデフォです。たとえ単一のテーブルからのselectでも「決まった順序で取り出せる」ことを期待してはいけません。 もちろん多くの場合は物理的な格納順とか主キーの順に取り出されたりはするでしょう。それがいつまで適用されるかは誰にもわかりません(誰も保証していないのですから)。 デバッグ中だけなのか、開発完了までなのか、運用開始して当分の間なのか、いずれにしても「アテにする」ことは出来ません(いつその期待を裏切られるかわからない)。 ∴ 決まった順序で取得する必要があるときには、必ず order by を書くように習慣付けておいてください。