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
이런 결과를 얻길 원합니다.
좋은방법없을까요?
제 부족한 실력으로는 쿼리가 잘 안나오네요 ..ㅠㅠ
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