SQL Update语句-基于非唯一记录更新行
我在OracleDB中有一个表,有3列,如下所示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
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 )