Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

다른 MySQL 테이블의 값을 사용해 한 테이블의 값을 업데이트하는 방법

한 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 값으로 성공적으로 업데이트된 것을 확인할 수 있습니다. 참고로, 서브쿼리가 여러 행을 반환하면 오류가 발생할 수 있으므로, 서브쿼리가 단일 값을 반환하도록 조건을 명확히 설정하는 것이 중요합니다.