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
)
答
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表将交易与交易链接起来。
对于数据建模建议+1。 – Laurence 2014-10-09 21:10:07