我正在浏览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中的多个列,还是会出现问题?
再次感谢。
答案 0 :(得分: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_