2007.09.04

サブクエリにORDER BY使って良いの?

先日古郡さんからサンプルのSQLをもらいました。
そのSQL文では、サブクエリをORDER BYでソートして...とやっています。
「2005から使えるようになったんだよ」
このひと言が気になったので、調べてみました。

SQL Server2000までは以下のとおり、サブクエリにORDER BYは使用できません。
>注 ORDER BY は、text 型または image 型の列に対しては使えません。
>また、サブクエリ、集計、および定数式は ORDER BY のリストには使えません
(SQL Server2000 Books Onlineより)

SQL Server2005では、条件付きで使用可能です。
>SELECT ステートメントで返される列で使用される並べ替え順を指定します。
>TOP を同時に指定しない場合、ビュー、インライン関数、派生テーブル、
>およびサブクエリでは ORDER BY 句は無効になります。
>
>メモ :
>ビュー、インライン関数、派生テーブル、またはサブクエリの定義で ORDER BY を使用する場合、
>この句は TOP 句で返される行の特定にのみ使用されます。
>クエリ自体にも ORDER BY を指定しない限り、これらの構造をクエリしたときに、
>ORDER BY 句で順序どおりの結果が得られるかどうかは保証されません。
(SQL Server2005 Books Onlineより)

たしかに、もらったサンプルにはTOP句が記述されていました。
なるほど...

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
sunohara