UPDATE table1 t SET t.columnA =
(SELECT MIN(columnB) FROM
(SELECT columnB FROM table2
WHERE table2.fk = t.pk
UNION ALL
SELECT columnB FROM table3
WHERE table3.fk = t.pk))
给了我ORA-00904: "T"."PK": invalid identifier
。关于如何实现这一点的任何想法?
答案 0 :(得分:1)
这是范围界定的问题。 Oracle无法识别外部查询别名多于一层嵌套深度。
如果我们假设值都在两个表中,那么您可以将LEAST()
与子查询一起使用:
UPDATE table1 t
SET t.columnA = LEAST( (SELECT MIN(columnB)
FROM table2
WHERE table2.fk = t.pk
),
(SELECT MIN(columnB)
FROM table3
WHERE table2.fk = t.pk
)
);
如果没有,您可以通过将关联子句移出一个级别来修改查询:
UPDATE table1 t
SET t.columnA = (SELECT MIN(columnB)
FROM ((SELECT table2.fk, columnB FROM table2
) UNION ALL
(SELECT table3.fk, columnB FROM table3
)
) tt
WHERE tt.fk = t.pk
);