- - PR -
UNION結合後のソート処理について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-09-11 15:30
今Oracleないので確認できないのですが、DISTINCTの場合は選択リストにない項目でOrder byできないかも。(もしかしてできます?) 私だったらNOT EXISTS使いますが、内容に比べてコードが複雑になりますね。 [ メッセージ編集済み 編集者: よっしー 編集日時 2007-09-11 15:31 ] | ||||||||
|
投稿日時: 2007-10-02 11:41
「unionすると結果がソートされる」は間違いです。
そのように見えるだけです。よくある勘違いです。 order byを指定しないと結果の順序は保証されません。マニュアルにも明記されているし、Oracle以外のDBでも同じです。 そもそも、単なるunionでは重複は排除されます。 select 'D1' from dual union select 'D1' from dual と select 'D1' from dual union all select 'D1' from dual を比べてみてください。 また、 select distinct * from ( select 'D1' from dual union all select 'D1' from dual union all select 'D2' from dual union all select 'D3' from dual ) order by 1 で試してください。 | ||||||||
|
投稿日時: 2007-10-02 12:30
deannaさん
こんにちは。
おそらく、質問者も回答者も知っているかと思います。 ただし、UNIONするとどうしても並び順が変わってしまうのでそれを抑えたいのだと思います。
質問者は重複を排除したいのでは?でもソートしたくないと。 | ||||||||
|
投稿日時: 2007-10-02 13:01
「ソートしたくない」という考え方は存在しませんよ。「ソートしたくない=ソートしたい」です。データベースには「ソートしたい」か「ソートはどうでもいい」しかありません。 「ソートしたくない」という強い意思があるということは「ソートはどうでもいい」ではなく、本人が直感的に期待した順序で「ソートしたい」ということを意味しています。 重複行を除去するかどうかは関係なくて、UNION ALL の場合にも、特定の並び順を期待するのであれば、そのようにソートを指示しなくてはいけないのです。UNION と UNION ALL で並び準が違うなんて言ってること自体が誤りですよ。 | ||||||||
|
投稿日時: 2007-10-02 14:02
なんでスレ主さんから返答もないのに続けるんですか?
|