【问题标题】:UPDATE EACH result from SELECT STATEMENT (Oracle SQL)更新来自 SELECT STATEMENT (Oracle SQL) 的每个结果
【发布时间】:2020-03-30 12:31:30
【问题描述】:

我正在尝试编写一个查询来更新 SELECT 语句的每个结果行。

SELECT u.P_ERPNUMBER, a.P_ERPNUMBER
from users u
inner join orders o on o.USERPK = u.PK
inner join addresses a on a.pk = o.PAYMENTADDRESSPK
where o.STATUSPK = 8796095414363 AND a.P_ERPNUMBER is NULL AND o.CODE in ('PL3001442611','PL3051023794');

上述查询返回值 [ u.P_ERPNUMBER ] 我需要用来更新每个字段 [ a.P_ERPNUMBER ]

我尝试将 SELECT 查询嵌套在如下所示的 UPDATE 语句中,但它返回“多行”错误...它会一个接一个地工作,但我需要它是一个批处理。

UPDATE ADDRESSES
SET P_ERPNUMBER = (
    SELECT u.P_ERPNUMBER
    from users u
    join orders o on o.USERPK = u.PK
    join addresses a on a.pk = o.PAYMENTADDRESSPK
    where a.P_ERPNUMBER is NULL )
where PK in ( SELECT PAYMENTADDRESSPK FROM ORDERS
WHERE STATUSPK = 8796095414363 AND CODE in ('PL3001442611','PL3051023794'));

更新每个a.P_ERPNUMBER 及其加入的u.P_ERPNUMBER 的正确方法是什么?

【问题讨论】:

    标签: sql oracle select foreach sql-update


    【解决方案1】:

    从子查询中删除连接地址并使用您正在更新的地址表:

    UPDATE ADDRESSES a
    ...
    join orders o on o.USERPK = u.PK
    WHERE a.pk = o.PAYMENTADDRESSPK
    AND a.P_ERPNUMBER is NULL )
    

    【讨论】:

    • 你摇滚!非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 2021-03-15
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    相关资源
    最近更新 更多