次のような簡単な更新ステートメントがあります。
UPDATE table_1 t1 SET (t1.a, t1.b, t1.c) =
(SELECT t2.x, t2.y, t3.z
FROM table_2 t2, table_3 t3, table_4 t4
WHERE
1 = 1
AND t2.id = t3.id
AND t2.id1 = t4.id1
AND t2.name = t1.name
) WHERE EXISTS
(SELECT 1 FROM t2
WHERE
1 = 1
AND t2.name = t1.name
)
内部の SELECT クエリで結果が得られます。しかし、UPDATE クエリ全体を実行すると、次のエラーで失敗します。この更新クエリで間違いを犯した場合はお知らせください。
t2.name = t1.name 条件により、テーブル t2 から複数のエントリが得られる可能性があるため、MERGE ステートメントを使用できないことに注意してください。この場合、merge ステートメントはエラー can't get stable set of rows で失敗する可能性があります。他のより良いアプローチがあれば教えてください。
更新: t1.a には NOT NULL 制約があります。そして、私の内部クエリは、t2.x を NULL として持たない結果を返します。