dポイントプレゼントキャンペーン実施中!

並び替えた後の表を結合したいと思っています。
UNIONを使うと、結合後でソートしてしまうので、これを回避したいです。

1つ目のSQL
 SELECT ID, NAME FROM A_TABLE WHERE F1 = '10' ORDER BY F2,F3

2つ目のSQL
 SELECT ID, NAME FROM A_TABLE WHERE F1 = '5' ORDER BY F3,F4

上記の2つの結果を1つにまとめて取得したいのです。
取得順は、1つめのSQLでF2,F3で並び替えられたデータの後、
2つめのSQLでF3,F4で並び替えられたデータにしたいです。
どうか良い方法を教えてください。

A 回答 (1件)

UNIONは、2つのクエリを重複を排除しつつ統合します。


重複を排除するために暗黙のソートが行われます。

暗黙のソートが行われたくないと言うことですので、重複の排除もされたくないかと
想像します。この場合、UNIONでなく、UNION ALLを使うことで、暗黙のソートは
行われません。(重複を排除しないので無駄な暗黙のソートを行わないから)

ただ、同じ表を複数回検索するなら、状況によっては、検索を1回にまとめて、
ソートだけを工夫する方が効率的かもしれません。

select ID,NAME from A_TABLE where F1 in ('10','5')
order by decode(F1,'10',1,'5',2),decode(F1,'10',F2,null),F3,F4;

など。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!