Oracle / SQL - 使用子查询/其他表的结果更新列[多个返回]

时间:2014-10-06 19:05:12

标签: sql oracle

需要更新“p_outbound_comments”表

enter image description here

这样“创建者”列就会使用p_shipping_view中相应的“car_move_id”填充自己,其中or_um匹配。

我正在使用此查询:

UPDATE p_outbound_comments t1 SET (creator) = (SELECT t2.car_move_id FROM p_shipping_view t2 WHERE t1.ordnum = t2.ordnum) WHERE EXISTS(SELECT 1 FROM p_shipping_view t2 WHERE t1.ordnum = t2.ordnum)

问题是SET的内部查询返回匹配的所有ord nums的car_move_id。因此,我得到一个oracle错误,因为内部查询返回多个结果。

如何使用p_shipping_view中的“car_move_id”更新每行“创建者”列succsessfuly,其中ordnum的匹配一次性完成?

2 个答案:

答案 0 :(得分:0)

如果子查询返回相同的值但是多个记录,则基本上可以在子查询中使用以下其中一个

选择不同的t2.car_mive_ID 选择max(t2.car_move_ID) 选择min(t2.car_movr_ID) 选择avg(t2.car_move_ID)

答案 1 :(得分:0)

我认为MERGE适用于此任务:

MERGE INTO p_outbound_comments D
  USING (
    SELECT car_move_id, ordnum
      FROM p_shipping_view
      WHERE car_move_id IS NOT NULL
  ) S ON (D.ordnum = S.ordnum)
  WHEN MATCHED THEN UPDATE
    SET D.creator = S.car_move_id
    WHERE D.creator IS NULL