相関サブクエリを使用してこれを実行できるはずです
UPDATE tbl1 t1
SET t1.b = (SELECT c
FROM tbl2 t2
WHERE t1.id = t2.id
AND t1.a = t2.a
AND t1.b = t2.b
AND t2.d = 'a')
WHERE t1.a = 'foo'
AND EXISTS( SELECT 1
FROM tbl2 t2
WHERE t1.id = t2.id
AND t1.a = t2.a
AND t1.b = t2.b
AND t2.d = 'a')
UPDATE
の問題 あなたが書いたことは、Oracleは正確に1つのtbl2.c
があることを保証できないということです 単一のtbl1.b
に対応する値 価値。 tbl2
に複数の行がある場合 tbl1
の特定の行 、相関更新は、単一行のサブクエリが複数の行を返したことを示すエラーをスローします。その場合、サブクエリにロジックを追加して、tbl2
のどの行を指定する必要があります。 その場合に使用します。