为什么我的更新(从何时选择)语句拒绝识别我的表别名?

dee*_*dee 1 sql oracle subquery

我正在浏览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_
Run Code Online (Sandbox Code Playgroud)

关于如何运行此类更新可能存在其他问题,这将是一个奖励.在尝试理解别名问题时,我对此更感兴趣.我试图分入

TableB.ID = TableA.Name_ 
Run Code Online (Sandbox Code Playgroud)

但没有运气

具体来说错误是ORA-00904无效的标识符.

一如既往地提前感谢.

上面的问题已经回答了我,但我确实有其他一些,因为我试图理解它.

我现在得到ORA-01779无法修改映射到非密钥保留表的列.我认为这是指我正在尝试更新正确的表格?因为我可以从视图或任何其他可能没有pk或fk的适当来源更新.

这种类型的更新语句可以与Oracle临时表一起使用,还是我可以预料到问题?

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

再次感谢.

Ton*_*ews 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_
Run Code Online (Sandbox Code Playgroud)