首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Informix中更新同一表的其他行中的字段

在Informix中更新同一表的其他行中的字段
EN

Stack Overflow用户
提问于 2015-01-24 01:29:14
回答 2查看 668关注 0票数 0

我们有一个旧的零件编号系统,导致许多重复记录。我们已经创建了一个新的系统来防止这种情况,我现在正在尝试将旧的零件号与当前的等价物联系起来。我们用于此功能的程序最初只允许手动将一个旧零件编号链接到新零件编号;如果有5个重复的零件编号,则每个都需要手动链接。我正在尝试编写一个更新查询,将所有这些重复的旧部件链接到替换它的单个新部件。

以下是数据的外观,例如,一个旧的部分链接到新的部分:

代码语言:javascript
复制
Old Part       New Part
123            XYZ
123
123
123
123

我需要做的是更新第2-5行,以便它们在新的part字段中都显示为XYZ。

对如何做到这一点有什么建议吗?下面是我尝试过的几个查询:

1

代码语言:javascript
复制
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

代码语言:javascript
复制
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

不幸的是,它们都产生了语法错误,而我没有太多的运气来找出一个可行的替代方案。

EN

回答 2

Stack Overflow用户

发布于 2015-01-27 08:10:37

可能不允许涉及自联接的UPDATE。试着把作业分成两步(如未经测试)

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2015-01-24 01:40:32

以下方法似乎不起作用,但我将这个答案留给其他人来帮助他们:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28115442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档