【SQL】カッコ内のクエリで実行されたorder by は無意味

徒然草2.0

(SQLのSELECT結果は順番を保証しないという意味では、当たり前ですが…)

…とある理由があってSELECT対象のxから、SELECTしているSQLがある。

概ね思った通りの結果が出る。

select * from (select * from table a order by id, name) as x;

概ね上手くいくということは、「たまに上手くいかない」ということだ。これが困る。

何が意図したとおりに動かないのかというと、、
order by id, nameが微妙に掛かっていないことがある。

だから、SQLはこのように書かないといけない。

select * from (select * from table a ) as x order by id, name;

xがunionで結合する場合は事前にindexでsortをかけておきたいと思い内包状態のaに対してsortしておきたくなるが意味がない。xに対してsortした結果を出すべきだ。という結論に至りました。

SQLは順番を保証しないので当たり前な現象と言えばそのとおりだけど、ソート済みの対象に対してのSELECT結果は感覚的にはソート済みあってほしいと思ってしまう。

(そもそも論を言えばテーブル構造とSQLがTrickyになってしまう問題なのだが(ぼやき))

徒然草2.0
スポンサーリンク
シェアする
gomiryoをフォローする
ごみぶろぐ

コメント

タイトルとURLをコピーしました