오라클 LEFT JOIN 하여 join이 걸리지않아 C컬럼이 NULL일때 ROW만 UPDATE 하고싶습니다. 0 2 2,435

by 십이장기 [SQL Query] [2021.03.24 15:21:41]


각각 테이블이

(테이블 A)

(테이블 B)

이렇게 있는데 키가 되는 컬럼id로 LEFT JOIN을 하는데

LEFT OUTER JOIN이라서 테이블B의 ID값이 NULL이 나올수도있습니다. B테이블이 JOIN이 안걸린것만 찾아서 A테이블의 UPDATE문을 실행하고 싶습니다.

그래서 SELECT으로만 표현하면

 

select *

from A

LEFT OUTER JOIN B ON A.ID = B.ID

WHERE B.ID IS NULL

 

조회하면 결과가

 

(결과)

 A.id         A.text             B.id      A.result

'TEST'     '테스트텍스트'    NULL     WAIT

 

이렇게 조회했을때 해당 join결과 B가 안나온 테이블A의 ROW에 대해서만 

 

update A

set A.RESULT = 'FAIL'

문을 실행하고싶습니다.

 

그래서 저 update문을 실행하고 아까 SELECT 문 쿼리를 실행하면

(결과)

 A.id         A.text             B.id      A.result

'TEST'     '테스트텍스트'    NULL     FAIL

이런 결과를 얻길 원합니다.

 

좋은방법없을까요?

 

제 부족한 실력으로는 쿼리가 잘 안나오네요 ..ㅠㅠ

by 뉴비디비 [2021.03.24 21:55:22]
UPDATE  /*+bypass_ujvc+*/ (
    SELECT
        A.id
        ,A.result
        ,B.id
    FROM A
    LEFT OUTER JOIN B ON A.id = B.id
    WHERE B.id IS NULL
) SET result = 'FAIL';

 


by 마농 [2021.03.25 02:14:59]
UPDATE a
   SET result = 'FAIL'
 WHERE NOT EXISTS (SELECT 1 FROM b WHERE id = a.id)
;
UPDATE a
   SET result = 'FAIL'
 WHERE id NOT IN (SELECT id FROM b)
;
MERGE INTO a
USING
(
SELECT a.id
  FROM a
  LEFT OUTER JOIN b
    ON a.id = b.id
 WHERE b.id IS NULL
) c
ON (a.id = c.id)
WHEN MATCHED THEN
  UPDATE
     SET result = 'FAIL'
;
-- http://gurubee.net/article/79308

 

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