NULLかどうかに基づいて、「X」または「Y」を選択したい次のシナリオ(下の表)があります。 Oracle UNION ALL問合せのレコード順序の保持
select 'X' as a
union all
select 'Y' as a
は、だから私は試したし、次のSQLを得たが、「ROWNUMの< = 1わからない:データ 'X' と 'Y' またはUNIONを含む
X Y pick
null not null Y
not null not null X
not null null X
行は以下のようにALLed "部分。 UNION ALLが の2つの行を照会する順序を保持する場合にのみ、これは(XとYの両方がヌルでない場合)機能します。
select a from
(
select 'X' as a
union all
select 'Y' as a
) where a is not null and rownum<=1;
select a from
(
select null as a
union all
select 'Y' as a
) where a is not null and rownum<=1;
select a from
(
select 'X' as a
union all
select null as a
) where a is not null and rownum<=1;
これは正しい方法ですか。あなたはSQLで特定の順序をしたい場合は、任意の洞察力がはるかに
'UNION'または' UNION ALL'の結果が集合です。セット*には注文がありません。あなたが簡単なテストで明白な順序を観察したとしても、今まで存在していたそのような命令に頼るべきではありません。 –