안녕하세요.
질문이 있어 글 올립니다
해당 소스는
SELECT된 BTABLE의 값을 ATABLE에 UPDATE하는 MYSQL 쿼리입니다
이 쿼리를 오라클로 어찌 처리해야 할지 문법을 찾아봐도 계속 에러가 나 질문 올립니다
UPDATE
ATABLE A
, (SELECT
ID
, NAME
, PASSWORD
FROM BTABLE) B
SET
A.ID = B.ID
, A.NAME = B.NAME
, A.PASSWORD = B.PASSWORD
WHERE A.ID = B.ID
MYSQL에서 BTABLE을 SELECT하는 부분이 있는데
오라클에선 SELECT하는 부분을 어디에 넣어줘야 할까요?
UPDATE 절에 조인하고 나서 SET절에서 매핑을 하면 되는데, 여기서는 ID 컬럼이 PK여야 한다고 하네요.
UPDATE (SELECT A.ID A_ID,
A.NAME A_NAME,
A.PASSWORD A_PASSWORD,
B.ID B_ID,
B.NAME B_NAME,
B.PASSWORD B_PASSWORD
FROM atable A , (SELECT ID, NAME, PASSWORD FROM btable) B
WHERE A.ID = B.ID ) t
SET t.A_ID=t.B_ID
, t.A_NAME = t.B_NAME
, t.A_PASSWORD = t.B_PASSWORD
-- 1. 서브쿼리 방식 UPDATE atable a SET (name, password) = (SELECT name, password FROM btable b WHERE b.id = a.id) WHERE EXISTS (SELECT 1 FROM btable b WHERE b.id = a.id) ; -- 2. MERGE MERGE INTO atable a USING btable b ON (b.id = a.id) WHEN MATCHED THEN UPDATE SET name = b.name , password = b.password ; -- 3. 조인 뷰 방식 UPDATE (SELECT a.name , a.password , b.name nm , b.password pw FROM atable a , btable b WHERE b.id = a.id ) SET name = nm , password = pw ; -- http://www.gurubee.net/article/79308