Sql 使用已存在的更新

Sql 使用已存在的更新,sql,oracle,oracle11g,erp,Sql,Oracle,Oracle11g,Erp,我正在测试这个更新语句,以更新数据库中所有4%、8%和9%的部分。我正在尝试获取QTY_倍数值,以匹配每层案例值 因此,类似REGEXP_的最终将是: > Regexp_like ( sp.part_no, '^4|^8|^9' ) 现在没有,因为我正在测试三个特定的部分。我想确保声明的其余部分按预期的方式工作 以下是我正在测试的内容: UPDATE SALES_PART_TAB sp SET sp.qty_multiple = ( SELECT cases_per_layer

我正在测试这个更新语句,以更新数据库中所有4%、8%和9%的部分。我正在尝试获取QTY_倍数值,以匹配每层案例值

因此,类似REGEXP_的最终将是:

> Regexp_like ( sp.part_no, '^4|^8|^9' )
现在没有,因为我正在测试三个特定的部分。我想确保声明的其余部分按预期的方式工作

以下是我正在测试的内容:

UPDATE SALES_PART_TAB sp
SET    sp.qty_multiple = ( SELECT cases_per_layer
                           FROM   HH_INV_PART_CHARS
                           WHERE  sp.part_no = HH_INV_PART_CHARS.part_no AND
                                  sp.contract = HH_INV_PART_CHARS.contract )
WHERE  Regexp_like ( sp.part_no, '^410-0017|^816-0210|^921-0003' ) AND
       EXISTS
       ( SELECT sp.contract,
       sp.part_no,
       sp.qty_multiple,
       HH_INV_PART_CHARS.cases_per_layer
         FROM   SALES_PART sp
                inner join HH_INV_PART_CHARS
                        ON sp.part_no = HH_INV_PART_CHARS.part_no AND
                           sp.contract = HH_INV_PART_CHARS.contract
         WHERE  sp.qty_multiple != HH_INV_PART_CHARS.cases_per_layer ); 
当我运行此语句时,它更新了16行

但是,我希望它能更新15行。我通过运行以下SELECT语句得出了这个结论:

SELECT sp.contract,
       sp.catalog_no,
       sp.qty_multiple,
       HH_INV_PART_CHARS.cases_per_layer
FROM   SALES_PART sp
       inner join HH_INV_PART_CHARS
               ON sp.part_no = HH_INV_PART_CHARS.part_no AND
                  sp.contract = HH_INV_PART_CHARS.contract
WHERE  sp.qty_multiple != HH_INV_PART_CHARS.cases_per_layer AND
       Regexp_like ( sp.part_no, '^410-0017|^816-0210|^921-0003' )
我认为我遇到的问题是UPDATE语句正在更新HH_INV_part_CHARS上sales_part表中的part_no和contract存在的所有行。它没有将更新限制在数量倍数不等于每层案例数(这是我想要的)的部分

我现在有点不知所措。我一直在尝试处理这两个子查询,但我没有找到问题所在。

更新查询中的
Regexp\u like(sp.part\u no,…)
指的是
SALES\u part\u TAB.spart\u no
,而在第二个查询中它指的是
SALES\u part.spart\u no

产生雾的原因之一是您在同一查询中重新定义了别名
sp
,因此
exists
子查询与正在更新的记录没有任何关系。这意味着如果您放弃
exists
条件,您仍然会更新16条记录。这似乎不太可能是你想要的

使用不同的别名,以便区分要引用的表。

更新查询中的
Regexp\u like(sp.part\u no,…)
指的是
SALES\u part\u TAB.spart\u no
,而在第二个查询中指的是
SALES\u part.spart\u no

产生雾的原因之一是您在同一查询中重新定义了别名
sp
,因此
exists
子查询与正在更新的记录没有任何关系。这意味着如果您放弃
exists
条件,您仍然会更新16条记录。这似乎不太可能是你想要的


使用不同的别名,以便可以区分要引用的表。

update
查询中的
Regexp\u like(sp.part\u no,…)
指的是
SALES\u part\u选项卡。spart\u no
,而在第二个查询中它指的是
SALES\u part.spart\u no
。产生雾的原因之一是您在同一查询中重新定义了别名
sp
,因此
exists
子查询与正在更新的记录没有任何关系。这意味着如果您放弃
exists
条件,您仍然会更新16条记录。这似乎不太可能是你想要的,就是这样。谢谢你澄清。好的,我把它作为一个答案发布了。在
更新
查询中的
Regexp\u like(sp.part\u no,…)
指的是
销售部分选项卡.spart\u no
,而在第二个查询中它指的是
销售部分.spart\u no
。产生雾的原因之一是您在同一查询中重新定义了别名
sp
,因此
exists
子查询与正在更新的记录没有任何关系。这意味着如果您放弃
exists
条件,您仍然会更新16条记录。这似乎不太可能是你想要的,就是这样。谢谢你澄清。好的,我把它作为答案贴了出来。