どして:
select 1 FROM DUAL
UNION ALL
select 1 FROM DUAL
MINUS
SELECT 2 FROM DUAL
oracleでは2行の1
ではなく、1つの1
のみを返しますか?
Oracleでは、現在すべての設定演算子 優先順位は同じ であり、上から下に評価されます。
SELECT 1
FROM DUAL
UNION ALL
SELECT 1
FROM DUAL;
両方の列に1が含まれる2つの行を返します。
ただし、minus
はunion
と同様に動作し(union all
ではなく)、重複を削除するため、distinct
-結果を確定します。
必要な結果を取得する1つの方法は、(1)
がUnion all
の結果に(1) MINUS (2)
-されるように括弧を追加することです。
SELECT 1
FROM DUAL
UNION ALL
(SELECT 1
FROM DUAL
MINUS
SELECT 2
FROM DUAL);
マーティン・スミスは、マイナスする前に結合する必要がない場合に考えられる解決策に取り組みました(これは、意図したとおりに機能するかどうかはわかりません)。重複する行を保持しながら、UNION
の前に最初にMINUS
する必要がある場合。私はあなたがこれらの線に沿って何かをしなければならないと思います:
SELECT
*
FROM (
SELECT 1 as col1 FROM DUAL
UNION ALL
SELECT 1 as col1 FROM DUAL) UN
WHERE NOT EXISTS (SELECT 2 as col1 FROM DUAL MI WHERE UN.col1 = MI.col1)
基本的にUNION ALL
次に、結果を(WHERE
句を介して)フィルタリングして、MINUS
データセットに存在するものを除外します。