我在Oracle db中有一个包含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是独一无二的)
答案 0 :(得分:1)
您可以使用相关更新:
update
table
set
LinkedID = (
select
TradeID
from
table t
where
table.DealID = t.DealID and
table.TradeID != t.TradeID
)
答案 1 :(得分: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表来链接交易与交易。