我们有一个旧的部件号系统,它会导致许多重复的记录。我们之后创建了一个新的系统来防止这种情况,我现在正试图将旧的部件号与当前的等价物联系起来。我们用于此功能的程序最初只允许手动将一个旧零件号链接到新零件号;如果有5个重复,则每个都需要手动链接。我正在尝试编写更新查询,将所有这些重复的旧部件链接到替换它的单个新部件。
以下是数据的外观,例如,一个旧部件链接到新部件:
Old Part New Part
123 XYZ
123
123
123
123
我需要做的是更新第2-5行,以便它们分别在新部分字段中说出XYZ。
有关如何执行此操作的任何建议?以下是我尝试过的一些问题:
1
update invmas dt1, invmas dt2
set dt1.inv_new_code = dt2.inv_new_code
where dt1.inv_stock_code = dt1.inv_stock_code and dt2.inv_new_code is not null
2
update invmas as t1
inner join invmas as t2 on
t1.inv_stock_code = t2.inv_stock_code and t2.inv_new_code is not null
set t1.inv_new_code = t2.inv_new_code
不幸的是,它们都会产生语法错误,而且我没有太多运气找出有效的替代方法。
答案 0 :(得分:1)
可能不允许涉及自我加入的UPDATE
。尝试将工作分为两个步骤,例如未经测试:
SELECT DISTINCT inv_stock_code, inv_new_code
FROM invmas
WHERE inv_new_code IS NOT NULL
INTO TEMP mlist1 WITH NO LOG;
UPDATE invmas AS i
SET inv_new_code = (SELECT m.inv_new_code
FROM mlist1 AS m
WHERE i.inv_stock_code = m.inv_stock_code)
WHERE inv_new_code IS NULL;
注意:如果您有一个旧代码的多个新代码,但仍然会出现问题,但无论如何您需要纠正的问题描述。
答案 1 :(得分:0)
以下似乎不起作用,但我将离开这个答案来帮助其他人:
update t1
set t1.inv_new_code = t2.inv_new_code
from invmas t1 inner join
invmas t2
on t1.inv_stock_code = t2.inv_stock_code and t2.inv_new_code is not null