我正在测试某些软件,需要手动对字段进行一些调整。对于工厂A生产的所有项目,需要为生产这些项目的其他工厂调整提前期。但是,其他工厂的其他项目需要正常的交货时间。
我有一个查询来选择在备用工厂生产的物料。我尝试使用存在的update并将其作为子查询。我似乎无法使其正常工作
update newgdmoperation
set newgdmoperation.productionoffset = 75
where exists
(
select
newgdmoperation.operationid
from newgdmoperation
right join
(
select mainproductid,productionoffset
from newgdmoperation
where fromlocationid = 'KR'
and transporttype like 'Ves%'
) a
on newgdmoperation.mainproductid = a.mainproductid
where fromlocationid <> 'KR'
and transporttype like 'Ves%'
)
这不会产生任何错误结果。但是,它将更新所有项目的字段。 实际上,where子句下的子查询返回需要更新的项目的operationid(唯一ID)。我期望使用where存在,只有子查询中的项目会被更新,而其余的则保持不变。
答案 0 :(得分:1)
假设您要更新NEWGDMOPERATION
表,在我看来您应该使用IN
而不是EXISTS
,因此您的声明应该是
UPDATE NEWGDMOPERATION g
SET g.PRODUCTIONOFFSET = 75
WHERE g.OPERATIONID IN (SELECT g2.OPERATIONID
FROM NEWGDMOPERATION g2
RIGHT JOIN (SELECT g3.MAINPRODUCTID,
g3.PRODUCTIONOFFSET
FROM NEWGDMOPERATION g3
WHERE g3.FROMLOCATIONID = 'KR' AND
g3.TRANSPORTTYPE LIKE 'VES%') a
ON g2.MAINPRODUCTID = a.MAINPRODUCTID
WHERE g2.FROMLOCATIONID <> 'KR' AND
g2.TRANSPORTTYPE LIKE 'VES%')