2011-04-07 52 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