문제점
UPDATE tbl SET score = score - 1 WHERE score > (SELECT score FROM tbl WHERE id = 1);
실행해 보면...
ERROR 1093 (HY000): You can't specify target table 'tbl' for update in FROM clause
UPDATE 대상 테이블과 WHERE 절에 사용된 sub query에는 동일한 테이블명이 있으면 안된다.
꼼수로 가능하게 하는 법
UPDATE tbl SET score = score -1
WHERE score > (SELECT t.score FROM (SELECT score FROM tbl WHERE id = 1) AS t);
다른 예제
UPDATE gd_order_log_each SET flag=5 WHERE ordno IN (
SELECT a.ordno FROM gd_order AS a
JOIN gd_order_log_each AS b ON a.ordno=b.ordno
WHERE a.step=4 AND b.flag!=5
GROUP BY b.ordno)
또는
UPDATE gd_order_log_each SET flag=5 WHERE ordno IN (
SELECT tbl.ordno FROM (SELECT a.ordno FROM gd_order AS a
JOIN gd_order_log_each AS b ON a.ordno=b.ordno
WHERE a.step=4 AND b.flag!=5
GROUP BY b.ordno) AS tbl)
'코딩 > SQL_Query' 카테고리의 다른 글
[MySQL] 초성 검색 함수 생성, 활용 (2) | 2022.10.04 |
---|---|
mysql - 여러 행(row)의 데이터를 한 줄로 출력 (0) | 2022.09.28 |
[MySQL] 있으면 UPDATE 없으면 INSERT - ON DUPLICATE KEY UPDATE (0) | 2015.04.20 |
[MySQL] REPLACE 문자열 치환하기, SUBSTRING_INDEX 문자열 자르기 (0) | 2014.09.18 |
[MySQL] SELECT 결과에 행 번호 자동으로 매기기 (0) | 2014.02.27 |