1

我正在浏览 AskTom 网站,发现应该是一个非常强大的更新语句工具,但我的语句拒绝接受子查询后的别名。有人可以为我解释一下并可能给出解决方案吗?

Update (SELECT T.Date_,T.Name_ 
        FROM TableA T, TableB P
        WHERE P.Date_ = T.Date_
        AND   P.Name_ = T.Name_) SET P.ID = T.Name_

关于如何运行此类更新可能还有其他问题,那将是一个奖励。在这一点上,我对尝试理解别名问题更感兴趣。我试图加入

TableB.ID = TableA.Name_ 

但没有运气

具体来说,错误是 ORA-00904 无效标识符。

一如既往地提前感谢。

上述问题已为我解答,但我确实有一些其他问题,因为我试图理解它。

我现在得到 ORA-01779 无法修改映射到非键保留表的列。我想这是指我要更新的表正确吗?因为我可以从视图或任何其他可能没有 pk 或 fk 的适当来源进行更新。

这种类型的更新语句可以与 Oracle 临时表一起使用吗?或者我会遇到问题吗?

我可以使用这种类型的语句和 case 语句来更新 TableA 中的多个列还是会出现问题?

再次感谢。

4

1 回答 1

5

执行UPDATE (query)操作时,您可以在括号外使用的唯一列是查询返回的列的名称 - 在本例中为 Date_ 和 Name_。您在查询中使用的表别名在括号外也无效。

因此,您需要的是:

Update (SELECT P.ID ,T.Name_ 
        FROM TableA T, TableB P
        WHERE P.Date_ = T.Date_
        AND   P.Name_ = T.Name_) SET ID = Name_
于 2012-05-11T15:24:45.877 回答