2014-10-06 53 views
0

需要更新“p_outbound_comments”表的Oracle/SQL - 更新与子查询/其他表结果中的栏[多返回]

enter image description here

使“创作者”一栏填入自己与相应的来自p_shipping_view的ordnum匹配的“car_move_id”。

我使用这个查询:

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内查询返回car_move_id的所有匹配的ORD NUMS的。正因为如此,我得到一个oracle错误,因为内部查询返回多个结果。

如何更新每行“创建者”列与p_shipping_view中的“car_move_id”,其中ordnum的匹配全部在一起?

+2

你必须选择其中之一。一种可能性是在第一个子查询中添加“where rownum = 1”。 – 2014-10-06 19:08:02

+0

那么,这件事,返回的两个是正确的。它们是需要分配给p_outbound_comments中各自行的两个car_move_id。 (在创建者字段中) – user3642066 2014-10-06 19:11:26

+0

(基于ordnum匹配) – user3642066 2014-10-06 19:13:08

回答

0

如果子查询返回的值相同,但基本上可以使用子查询的下列之一

选择不同t2.car_mive_ID 选择MAX(t2.car_move_ID) 选择分多个记录(t2.car_movr_ID) 选择AVG(t2.car_move_ID)

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