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

SQL Update语句-基于非唯一记录更新行,sql,oracle,Sql,Oracle,我在OracleDB中有一个表,有3列,如下所示 DealID ---TradeID -----LinkedID 10000 -------1 ------------Null 10000 -------2 ------------Null 10001 -------3 ------------Null 10001 -------4 ------------Null 我想编写一条SQL语句来更新链接id列,以返回以下更新的表 DealID ---TradeID

我在OracleDB中有一个表,有3列,如下所示

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
    )

将更新表中的每一行。这假设每个
dealID
在表中正好有两行
tradeID

从数据模型的角度来看,这种交叉链接似乎是相当有问题的。我强烈建议将数据标准化。听起来交易与交易相关,因此可能应该有一个
deal
表、
trades
表和一个1:n表来链接交易与交易

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