2014-10-09 158 views
0

我在Oracle數據庫與3列的表如下SQL更新語句 - 更新行基於非唯一的記錄

DealID ---TradeID -----LinkedID 

10000 -------1 ------------Null 

10000 -------2 ------------Null 

10001 -------3 ------------Null 

10001 -------4 ------------Null 

我想編寫一個SQL語句來更新鏈接的id列返回下面的更新表

DealID ---TradeID -----LinkedID 

10000 -------1 -----------2 

10000 -------2 -----------1 

10001 -------3 -----------4 

10001 -------4 -----------3 

對於每個交易ID和貿易ID組合,尋找其他貿易ID也與該交易ID和該值作爲鏈接ID更新記錄。 每個交易ID有2個不同的交易ID。 (交易ID是唯一的)

回答

1

你可以使用相關的更新:

update 
    table 
set 
    LinkedID = (
     select 
      TradeID 
     from 
      table t 
     where 
      table.DealID = t.DealID and 
      table.TradeID != t.TradeID 
    ) 

Example SQLFiddle

1
UPDATE table_name dest 
    SET linkedID = (SELECT src.tradeID 
        FROM table_name src 
        WHERE src.dealID = dest.dealID 
         AND src.rowid != dest.rowid) 

將更新表中的每一行。這假定每個dealID在表中具有兩個tradeID行。

從數據模型的角度來看,這種交叉鏈接似乎相當有問題。我強烈建議規範化數據。這聽起來像交易與交易相關聯,所以可能應該是deal表,trades表和1:n表將交易與交易鏈接起來。

+0

對於數據建模建議+1。 – Laurence 2014-10-09 21:10:07