에러 원인
MySQL은 UPDATE, DELETE의 경우 SELECT와 달리 자기 테이블의 데이터를 바로 사용할 수 없다.
상황
A 카테고리에서 1등 게시글의 포인트 점수와, B 카테고리에서 1등 게시글의 포인트의 차이를 계산해서 gap column을 업데이트 하고 싶다.
테이블 정의
CREATE TABLE post
(
id BIGINT AUTO_INCREMENT
PRIMARY KEY,
category VARCHAR(1) NOT NULL,
today_rank BIGINT NOT NULL,
point INT NOT NULL,
gap INT NULL
);
에러 발생 쿼리
UPDATE post
SET gap = point - (SELECT point
FROM post
WHERE category = 'B'
AND today_rank = 1)
WHERE category = 'A'
AND today_rank = 1;
해결
한번더 SELECT 절로 감싸서 Sub Query를 추가한다.
UPDATE post
SET gap = point - (SELECT point
FROM (SELECT point
FROM post
WHERE category = 'B'
AND today_rank = 1) AS p)
WHERE category = 'A'
AND today_rank = 1;
'database' 카테고리의 다른 글
Isolation Level - 트랜잭션 격리 수준 깊게 이해하기 (1) | 2025.04.12 |
---|---|
MVCC 깊게 이해하기: Undo Log 기반 다중 버전 동시 제어의 원리 (0) | 2025.03.29 |
트랜잭션과 ACID (0) | 2025.03.23 |
ubuntu에 mysql 설치하기 (0) | 2024.11.18 |
MySQL Error [1248]: Every derived table must have its own alias (0) | 2024.03.16 |