問題
SET が外部結合テーブルを参照する更新クエリを作成する必要があります。
これは SQL Server でかなり簡単に実行できますが、更新クエリでは単一のテーブルしか許可されていないため、Oracle の構文を理解するのにかなりの時間を費やしています。
次の Oracle クエリを作成しました。
UPDATE SalesExt_tmp tmp
SET slsrep = (SELECT three_dig_rep
FROM dw_sls_rep_conv sls
WHERE sls.aims_rep = tmp.slsrep)
WHERE EXISTS (SELECT three_dig_rep
FROM dw_sls_rep_conv sls
WHERE sls.aims_rep = tmp.slsrep)
AND tmp.sysind = 'AIM';
これで交差は処理されますが、dw_sls_rep_conv に同等の一致がない SalesExt_tmp の値を処理する必要があります (null 値をデフォルト値に設定する case ステートメントを追加する予定です)。これを行うには、dw_sls_rep_conv を外部結合テーブルとして設定する必要があります。しかし、これは私が立ち往生するところです。
SQL サーバーの例
SQL Server では、更新クエリに複数のテーブルを含めることができるため、ソリューションは簡単です。
UPDATE SalesExt_tmp tmp
LEFT JOIN dw_sls_rep_conv sls ON sls.aims_rep = tmp.slsrep
SET tmp.slsrep = sls.three_dig_rep
WHERE tmp.sysind = 'AIM';
しかし、私は一生、Oracleでこれを行う方法を理解できません。このクエリにより、場合によっては slsrep フィールドが NULL に設定され、この操作が許可されないのではないかと心配になることを理解しています。
質問
1)まず、これはOracleで可能ですか?(そうじゃなきゃいけないよね?)
2) これを実現するには、クエリをどのように再構築する必要がありますか? WHERE EXISTS 句を削除する必要があると思いますが、JOIN を配置する場所についてはまだ悩んでいます。