[SQL] 다중 JOIN 한 Table에 UPDATE 하기

forhjy
3 min readJan 9, 2023

--

Photo by Campaign Creators on Unsplash

여태까지 특정 테이블에 UPDATE 하는 쿼리는 해봤어도 다중 JOIN을 한 테이블에 UPDATE 해본 적은 없어서 삽질을 많이 했다. 실행시켜야 되는 쿼리는 tableA, tableB, tableC 세 개의 테이블을 JOIN 을 해야한다. tableB는 bridge 역할을 해주는 테이블이고, tableC의 특정 값을 가진 tableA의 특정 값을 UPDATE 시켜야 한다.

내가 시도했던 쿼리문은 아래와 같다.

  1. 틀린 쿼리(FAIL)
  • 쿼리만 봤을 땐 어떤 걸 의도하는구나 알겠지만 아예 실행이 되지 않는 쿼리다.
UPDATE
(
SELECT a."columnOfA", joinedT."columnOfJoinedT"
FROM schema."tableA" AS a
JOIN
(
SELECT b."columnOfB", c."columnOfC"
FROM schema."tableB" AS b
JOIN schema."tableC" AS c
ON b."joinKey2" = c."joinKey2"
) AS joinedT
ON a."joinKey1" = joinedT."joinKey1"
) AS final
SET "updateColumn" = REPLACE (final."updateColumn", 'AS-IS', 'TO-BE')
WHERE final."someColumn" = 'hasSpecificVal'

2. 틀린 쿼리 (FAIL)

  • 이건 1번이 실패해서 작성했던 쿼리이다.
UPDATE schema."tableA"
FROM schema."tableA" AS a
JOIN
(
SELECT b."columnOfB", c."columnOfC"
FROM schema."tableB" AS b
JOIN schema."tableC" AS c
ON b."joinKey2" = c."joinKey2"
) AS joinedT
ON a."joinKey1" = joinedT."joinKey1"
SET "updateColumn" = REPLACE (a."updateColumn", 'AS-IS', 'TO-BE')
WHERE joinedT."someColumn" = 'hasSpecificVal'

3. 성공 쿼리 (SUCCESS)

  • JOIN 문에는 tableB tableC를 조인
  • WHERE 문 첫번째 조건은 table A와 tableB, tableC를 조인한 테이블을 조인하는 조건 명시
  • 그 다음 AND 조건에 세 테이블을 조인한 테이블에서 원하는 조건 명시
UPDATE schema."tableA" AS a
SET "updateColumn" = REPLACE (a."updateColumn", 'AS-IS', 'TO-BE')
FROM schema."tableB" AS b
JOIN schema."tableC" AS c
ON b."joinKey2" = c."joinKey2"
WHERE
b."joinKey1" = a."joinKey1"
AND c."someColumn" = 'hasSpecificVal'

--

--

forhjy
forhjy

Written by forhjy

Software Engineer Based in Seoul

No responses yet