2014-10-06 3 views
0

는 "p_outbound_comments"를 업데이트해야 할 테이블을 업데이트 그래서 "창조자"열은 해당 자신을 채우는오라클/SQL - 하위 쿼리/다른 테이블의 결과와 열 [복수 반환]

enter image description here

ord_num이 일치하는 p_shipping_view에서 "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에 대한 내부 쿼리와 일치하는 ORD의 nums 모두를위한 car_move_id 년대를 반환한다는 것입니다. 이 때문에 내부 쿼리가 하나 이상의 결과를 반환하므로 Oracle 오류가 발생합니다.

각 행의 "작성자"열 succsessfuly를 "car_move_id"(p_shipping_view)에서 어떻게 업데이트 할 수 있습니까?

+2

당신은 그들 중 하나를 선택해야합니다. 하나의 가능성은'rownum = 1'을 첫 번째 서브 쿼리에 추가하는 것입니다. –

+0

글쎄, 그게 사실이야, 두 반환됩니다 맞습니다. 그것들은 p_outbound_comments의 각 행에 할당되어야하는 두 개의 car_move_id입니다. (제작자 필드에서) – user3642066

+0

(ordnum 일치 기준) – user3642066

답변

0

서브 쿼리가 같은 값하지만 기본적으로

별개의 t2.car_mive_ID 선택 최대 (t2.car_move_ID) 선택 분을 선택하여 하위 쿼리에서 다음 중 하나를 사용할 수있는 여러 레코드를 반환하는 경우 (t2.car_movr_ID) 선택 평균 (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