この記事の要約:「ORDER BYを使わない場合、SQLで抽出した際の並び順は保証されない」
SQL文で抽出を行った際に、困ったことが起きました。
同じPG文なのに1回目と2回目で出力結果に違いがあるのです。
仕事上でこんな事象が起きて、仕事上のPGを載せる訳にはいかないので、
このブログ記事を書いているプライベートPC上で再現をしようとしたのですが、
再現できませんでした。
なのでこれから貼るキャプチャはイメージ図として見ていただけると幸いです。
結論から言うと、「ORDER BYを使わない場合、SQLで抽出した際の並び順は保証されない」みたいです。
- (参考:mysql – ORDER BY を指定しない時 / SELECT結果表示並び順 の法則性 – スタック・オーバーフロー (stackoverflow.com))
- (参考:【DB】orderを指定しない場合のselect取得順 | しきゆらの備忘録 (shikiyura.com))
イメージ図で表すと、こんな感じ。
DBから抽出した且つ、ORDER BY句が無い時に、今回の事象が起こり得るようです。
体感ですが、DBから抽出する際に、件数が多いほど今回の事象が見られやすいかと思います。
今回の事象を回避するには、
- SQLでORDER BY句を使う。(参考:【SAS】ORDER BYは指定した項目の順番でレコードを並び替える。【SQL】 | ビジネスイッチ (how-to-business.com))
- SASでSORTプロシージャを使う。(参考:【SAS】SORTプロシージャはBYで指定した変数で並べ替える その1 昇順 | ビジネスイッチ (how-to-business.com))
といったことが有効だと考えられます。