오라클 JOIN 후 업데이트 0 2 1,349

by 아침이네 [Oracle 기초] oralce [2022.06.28 10:41:43]


오라클인데

테이블 a 와 b를  join 한 다음 나온 데이터로 a테이블의 특정 컬럼을 업데이트 할려면 어떻게 해야 하나요?

밑에 처럼 했는데 잘 안되네요..

UPDATE TABLE1 A
SET cp_no=(SELECT b.no FROM TABLE1 a LEFT JOIN TABLE2 b ON a.OFFC_NAME=b.name
            WHERE (a.CODE ='A123' OR a.CODE ='A124' OR a.CODE ='A125')  AND b.GBN='Y' ) 

 

by 마농 [2022.06.28 11:09:19]
UPDATE table1 a
   SET cp_no = (SELECT b.no FROM table2 b WHERE b.gbn = 'Y' AND b.name = a.offc_name)
 WHERE a.code IN ('A123', 'A124', 'A125')
   AND EXISTS (SELECT 1 FROM table2 b WHERE b.gbn = 'Y' AND b.name = a.offc_name)
;

UPDATE table1 a
   SET cp_no = (SELECT b.no FROM table2 b WHERE b.gbn = 'Y' AND b.name = a.offc_name)
 WHERE a.code IN ('A123', 'A124', 'A125')
   AND a.offc_name IN (SELECT b.no FROM table2 b WHERE b.gbn = 'Y')
;

MERGE INTO table1 a
USING table2 b
ON (a.offc_name = b.name)
WHEN MATCHED THEN
UPDATE SET a.cp_no = b.no
 WHERE a.code IN ('A123', 'A124', 'A125')
   AND b.gbn = 'Y'
;

-- b.name 이 PK 라면 다음 구문도 가능함. PK 아니라면 불가.
-- 다만, 컬럼명이 name 인 걸로 봐서는 PK 일 가능성 희박해 보임
UPDATE (SELECT a.cp_no
             , b.no
          FROM table1 a
         INNER JOIN table2 b
            ON a.offc_name = b.name
         WHERE a.code IN ('A123', 'A124', 'A125')
           AND b.gbn = 'Y'
        ) c
   SET cp_no = no
;

http://gurubee.net/article/79308

 


by 우리집아찌 [2022.06.28 13:38:32]

저는 알아보기 쉬운 Merge Into 구문을 많이 사용합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입