오라클인데
테이블 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' )
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
저는 알아보기 쉬운 Merge Into 구문을 많이 사용합니다.