我有一个简单的更新语句:
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 查询时,它失败并出现错误:ORA-01407“无法将 (%s) 更新为 NULL” 它还表示无法将 t1.a 更新为 NULL。如果我在此更新查询中犯了任何错误,请告诉我。
请注意,我不能使用 MERGE 语句,因为 t2.name = t1.name 条件可能会给我来自表 t2 的多个条目。在这种情况下,合并语句可能会因错误而失败,无法获得稳定的行集。如果有任何其他更好的方法让我知道。
更新: t1.a 有 NOT NULL 约束。我的内部查询返回的结果没有 t2.x 为 NULL。