- - PR -
UNION結合後のソート処理について
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-09-10 23:09
ORACLEにてUNION結合をすると結果がソートされてしまいます。
検索結果で重複データを出力せず、並び替えを行わないようにするにはどうしたらいいでしょうか? 具体的にやりたいことは SELECT DATA1 AS DATA FROM TABLE1 UNION SELECT DATA2 AS DATA FROM TABLE2 UNION SELECT DATA3 AS DATA FROM TABLE3 とした場合、DATAをDATA1、DATA2、DATA3の順でかつ重複を出力しないようにしたいのですが。。。 以上です。よろしくお願いします。 | ||||||||||||||||
|
投稿日時: 2007-09-11 02:55
saki1208です。
UNION使用すると、重複行の除外のためにいったんソート されたかと。 実行計画を取ってみればわかるはず。 # 手元に環境がないので確認できませんが。 で、実現方法ですが、「UNION ALLとROW_NUMBER」を使用するか 「NOT EXISTS」を使用すればできるんじゃないですかねぇ。 | ||||||||||||||||
|
投稿日時: 2007-09-11 09:52
検証してないけど、
各テーブル毎にダミーの項目を追加すればいけるかも。 #嘘だったら申し訳ないです。 select '1' as dummy, data1 as data from table1 union select '2' as dummy, data2 as data from table2 | ||||||||||||||||
|
投稿日時: 2007-09-11 12:32
たぶん同一テーブル内の重複は排除できるが、table1、table2をまたがった重複は排除できない気がします。 | ||||||||||||||||
|
投稿日時: 2007-09-11 12:51
無理だろうとは思いつつ、
UNION ALLの後にDISTINCTはどうでしょう? 万一できたとしても並び順は保証されないと思いますけど。 | ||||||||||||||||
|
投稿日時: 2007-09-11 14:24
msoです。
minusをつかうのはどうでしょうか? select 1 as dummy, employee_id from employees minus select 2 as dummy, employee_id from copy_emp order by dummy | ||||||||||||||||
|
投稿日時: 2007-09-11 14:39
3つめのテーブルも応用で。 #not existsのつけ方に気をつけて、 #間違えると重複してるレコードはどこにも出力されないとかになっちゃう ↓ん?・・・・これでいい気がする [ メッセージ編集済み 編集者: べる 編集日時 2007-09-11 15:14 ] | ||||||||||||||||
|
投稿日時: 2007-09-11 14:52
これではダメですか?
|