SQL更新语句 - 更新行基于非唯一的记录

问题描述:

我在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是唯一的)

你可以使用相关的更新:

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

Example SQLFiddle

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