使用join语法的Oracle更新无法正常工作

时间:2011-04-13 09:08:46

标签: sql sql-update

这是我在MS Access中的工作查询...

UPDATE Caxnode AS A INNER JOIN Caxnode AS B ON A.node_alias = B.node_alias 
SET A.partition_Type = 'LDOM', A.node_mode = 'LOGICAL', A.host_id = b.host_id, A.num_of_proc = b.num_of_proc 
WHERE (((A.node_mode)='virtual' Or (A.node_mode)='regular') AND ((B.partition_Type)='LDOM'));

这在Oracle中不起作用,我用谷歌搜索并认为该更新不适用于Oracle中的内部联接..

有人可以帮我翻译一下这个查询以便在Oracle上工作吗?

1 个答案:

答案 0 :(得分:0)

更新中的JOIN是UPDATE的MS专有扩展。从谷歌搜索Oracle Update Syntax,我相信你可以把它写成:

UPDATE Caxnode AS A
SET (partition_Type, node_mode, host_id, num_of_proc)
= (select 'LDOM', 'LOGICAL', host_id, num_of_proc from Caxnode B where A.node_alias = B.node_alias and B.partition_Type='LDOM')
WHERE A.node_mode='virtual' Or A.node_mode='regular'

此语法确实确保如果B端有多行,则会出现错误,而在Access / SQL Server中,它会默默地随机选择其中一行。