oracleのCTE内に共用体を持つ問合せがあります。私はデータベースにPというフィールドの合計を取得しようとしていて、自分の見解を書いていたときに値が正確であることを確認していました。レコードを削除しても重複はありません
CTE_C as
(select P, coverage from CTE_A
union
select P, coverage from CTE_B)
select sum(P) from CTE_C where coverage='full'
私は78
を得る:私は、私は次の操作を行う場合は、しかし、100を取得select sum(P) from CTE_A
場合はここで組合
with CTE_A as
(select P, 'full' as coverage from Table_A),
CTE_B as
(select P, 'partial' as coverage from Table_A)
を追加した後に異常な方法でこれらのクエリを処理するOracleのを見つけました
私がユニオンを使用すると、私は再び100を得ます。私は組合が重複を削除することを知っていますが、フィールドカバレッジを宣言しているので、CTE_AとCTE_Bの中に重複はありません。
UNIONは、各オペランド(テーブル)内にすでに存在するものを含む**すべての**重複を削除します - テーブル間の重複*だけでなく、 – mathguy