マージのルールは、ターゲットテーブルの行に一致するUSINGサブクエリに複数の行が存在しないことです。与えられたROW_WIDに複数の異なるCONTACT_WIDがあるのであれば、それはROW_WIDために複数の行が返されます
SELECT distinct ROW_WID, CONTACT_WID FROM W_ASSET_D
:
あなたのサブクエリはこれです。 CONTACT_WIDが異なるため、DISTINCT句は役に立ちません。
あなたの声明ではORA-30926
が発砲しているという事実は、これがあなたのデータの状態であることを示しています。 OracleはW_ASSET_D.CONTACT_WIDがWC_FNHLDNG_Dにマージするための正しいものであるかどうかわかりません。 ROW_WIDごとに1つのCONTACT_WIDのみを返すように、USINGサブクエリを書き換えるソリューションです。
WHERE句に追加できるビジネスルールをいくつか追加する必要があります。しかし最後の手段として、集計関数を使用することができます。
USING (SELECT ROW_WID, max(CONTACT_WID) as CONTACT_WID
FROM W_ASSET_D
WHERE X_TYPE_CD='Fin Account'
group by ROW_WID
)T2
これはずっとによるランダムCONTACT_WIDを選択するよりも良いではないです:)
出典
2017-08-08 05:26:35
APC
の代わりに、あなたの質問に直接貼り付けコピーしてくださいあなたのコードのイメージを掲載します。 – litelite
コードやSQLの画像は役に立たない。理由の多くは、[this meta post](https://meta.stackoverflow.com/a/285557/62576)を参照してください。 SQLはプレーンテキストなので、コピー、ペースト、適切な書式設定が可能です。これを行うには[編集]してください。ありがとう。 –