2011-04-07 100 views
0

我有具有字段node_alias,node_mode,NODE_ID等的表caxnode结果..更新的选择

在一些情况下,node_alias被标记为“常规”以及“逻辑”为不同的NODE_ID的。我想将相同node_alias标记为“常规”以及“逻辑”的条目更改为逻辑。即如果表中标记为'逻辑'并且是LDOM分区,则将“常规”更改为“逻辑”。

这是我的工作查询以返回我感兴趣的更改结果。

select Node_ID, Node_type, Num_of_proc, Node_Alias, Host_ID, Node_mode, Partition_Type 
from CAXNODE nd 
where (Node_mode = 'VIRTUAL' or Node_mode = 'REGULAR') 
and Node_Alias in 
    (select nd2.Node_Alias 
    from CAXNODE nd2 
    where nd2.Node_mode = 'LOGICAL' and Partition_Type = 'LDOM' 
    ) ; 

现在我想改变值Node_mode设置为“逻辑”; Partition_Type改为'LDOM',Host_ID改为(nd2.Host_ID); Num_of_proc到(nd2.Num_of_proc);

如何在一个更新语句中执行此操作?

+0

您正在使用哪些DBMS? PostgreSQL的?甲骨文? DB2? – 2012-05-04 13:00:31

回答

0

简单。删除SELECT,并用UPDATE [目标]替换,然后添加SET更改列表。

--select Node_ID, Node_type, Num_of_proc, Node_Alias, Host_ID, Node_mode, Partition_Type 
UPDATE nd 
SET 
    Node_mode = 'LOGICAL', 
    Partition_Type = 'LDOM', 
    Host_ID = nd2.Host_ID, 
    Num_of_proc = nd2 Num_of_proc 
from CAXNODE nd 
where (Node_mode = 'VIRTUAL' or Node_mode = 'REGULAR') 
and Node_Alias in 
    (select nd2.Node_Alias 
    from CAXNODE nd2 
    where nd2.Node_mode = 'LOGICAL' and Partition_Type = 'LDOM' 
    ) ; 
+0

是来自这一个访问得到一个语法错误。我试图简单地更新CAXNODE SET Node_mode = '逻辑', Partition_Type = 'LDOM', HOST_ID = nd2.Host_ID 从caxnode ND1 其中(Node_mode ='虚拟”或Node_mode = '常规' 从CAXNODE ND2 在 ) 和Node_Alias(选择nd2.Node_Alias 其中nd2.Node_mode = '逻辑' 和Partition_Type = 'LDOM' );但它表示从caxnode nd1' – 2011-04-11 05:43:28

+0

查询表达式'nd2.host_id'中的语法错误(缺少表达式)不认为更新FROM是由oracle支持或访问.. – 2011-04-11 07:47:40

+0

不认为从ansi sql支持更新。你能帮我解决一下ansi sql的问题吗? – 2011-04-11 11:03:52