본문 바로가기

SQL

UPDATE FROM절 서브쿼리

UPDATE문에 사용도는 FROM절의 서브쿼리는 직접적으로 UPDATE 대상 테이블에 대한 뷰로 생성되기에 
서브쿼리에서 사용된 테이블 별칭이나 칼럼명은 직접적으로 대상 테이블이 아니라 참조할 수 없다..

따라서 직접적으로 UPDATE 대상인 참조 테이블의 테이블을 참조하는 형식으로 작성해야 된다.

 

UPDATE 
(
    SELECT
    MK,MB,BN,BB,MT,SUM
    FROM 
    (
        SELECT 
        A.MASTER_KYOHWAN MK,
        A.MASTER_BLOCK MB,
        B.BKBR_BKNAME BN,
        b.bkbr_brname BB,
        A.MASTER_STATUS MT,
        SUM(A.MASTER_AMOUNT) SUM
        FROM MASTER_PROPOSE A 
        LEFT OUTER JOIN BKBR B
        ON A.MASTER_BK||MASTER_BR = B.BKBR_BK||BKBR_BR
        WHERE 
            TO_NUMBER(A.MASTER_AMOUNT) > 1000000001 AND MASTER_GUBUN = '12'
            AND A.MASTER_KYOHWAN LIKE '%05%'
        GROUP BY
        A.MASTER_KYOHWAN,
        A.MASTER_BLOCK,    
        B.BKBR_BKNAME,    
        b.bkbr_brname,
        A.MASTER_STATUS
    )
    WHERE 1=1    
    ORDER BY MK,MB,BN,BB
)
SET MT = 'FALSE'
WHERE  BKBR_BKNAME IS NULL OR
        bkbr_brname IS NULL

이런 식이 아니라

UPDATE MASTER_PROPOSE 
SET MASTER_STATUS = 'FALSE'
WHERE MASTER_KYOHWAN LIKE '%05%'
      AND MASTER_GUBUN = '12'
      AND TO_NUMBER(MASTER_AMOUNT) > 1000000001
      AND (MASTER_BK, MASTER_BR) IN 
      (
        SELECT A.MASTER_BK,A.MASTER_BR
        FROM MASTER_PROPOSE A
        LEFT OUTER JOIN BKBR B
        ON A.MASTER_BK||MASTER_BR = B.BKBR_BK||BKBR_BR
        WHERE
            TO_NUMBER(A.MASTER_AMOUNT) > 1000000001 AND A.MASTER_GUBUN = '12'
            AND A.MASTER_KYOHWAN LIKE '%05%'
            AND (B.BKBR_BKNAME IS NULL OR B.BKBR_BRNAME IS NULL
       )
);

이런 식으로 해야 한다.

반응형