에러 원인
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' 카테고리의 다른 글
ubuntu에 mysql 설치하기 (0) | 2024.11.18 |
---|---|
MySQL Error [1248]: Every derived table must have its own alias (0) | 2024.03.16 |