한 MySQL 테이블의 값을 다른 MySQL 테이블에 저장된 값을 이용해 업데이트하려면, UPDATE 문의 SET 절에서 서브쿼리(sub-query)를 표현식으로 활용해야 합니다. 서브쿼리가 조건에 맞는 행마다 해당 값을 반환하면서 원하는 데이터로 손쉽게 갱신할 수 있습니다.
예시
이 예제에서는 'student'와 'info'라는 두 개의 테이블을 사용합니다. 'info' 테이블의 'remarks' 컬럼 값을 가져와서 'student' 테이블의 'grade' 컬럼 값을 업데이트해 보겠습니다.
mysql> select * from student; +----+---------+-------+ | Id | Name | grade | +----+---------+-------+ | 1 | Rahul | NULL | | 2 | Gaurav | NULL | | 3 | Raman | NULL | | 4 | Harshit | NULL | | 5 | Aarav | NULL | +----+---------+-------+ 5 rows in set (0.01 sec) mysql> select * from info; +------+-----------+ | id | remarks | +------+-----------+ | 1 | Good | | 2 | Good | | 3 | Excellent | | 4 | Average | | 5 | Best | +------+-----------+ 5 rows in set (0.00 sec) mysql> UPDATE STUDENT SET grade = (SELECT remarks from info WHERE info.id = student.id) WHERE id > 0; Query OK, 5 rows affected (0.08 sec) Rows matched: 5 Changed: 5 Warnings: 0
위 UPDATE 문은 서브쿼리를 통해 'info' 테이블에서 동일한 id를 가진 행의 remarks 값을 조회한 뒤, 그 값을 'student' 테이블의 grade 컬럼에 대입합니다. 두 테이블을 id 기준으로 연결하기 위해 WHERE info.id = student.id 조건을 사용했다는 점이 핵심입니다.
실제로 값이 제대로 반영되었는지는 아래 SELECT 쿼리의 결과를 통해 확인할 수 있습니다.
mysql> Select * from student; +----+---------+-----------+ | Id | Name | grade | +----+---------+-----------+ | 1 | Rahul | Good | | 2 | Gaurav | Good | | 3 | Raman | Excellent | | 4 | Harshit | Average | | 5 | Aarav | Best | +----+---------+-----------+ 5 rows in set (0.00 sec)
결과를 보면 'student' 테이블의 grade 컬럼이 NULL에서 'info' 테이블의 remarks 값으로 성공적으로 업데이트된 것을 확인할 수 있습니다. 참고로, 서브쿼리가 여러 행을 반환하면 오류가 발생할 수 있으므로, 서브쿼리가 단일 값을 반환하도록 조건을 명확히 설정하는 것이 중요합니다.