MySQL은 LIMIT
for DELETE
쿼리를 지원 합니다 . MAX(trainID)
발견 한 을 가져 오려고 시도하는 대신 하위 쿼리를 수행 할 때 오류가 발생하는 대신 ORDER BY
및 LIMIT
.
DELETE FROM Trans
ORDER BY trainID DESC
LIMIT 1
에서 사용하는 대신 하위 쿼리에 대해 조인하도록 대안으로 작동해야합니다 WHERE
.
DELETE t.*
FROM
Trans t
INNER JOIN (SELECT MAX(trainID) maxt FROM Trans) tmax ON t.trainID = tmax.maxt
여기에 두 가지 버전이 있습니다.
모든 행 과 일치 (SELECT MAX(trainID))
하는 부울로 평가 되기 때문에 귀하의 행은 모든 행을 삭제합니다.TRUE
이제 작동하지만 모든 항목을 선택하고 모든 항목을 삭제합니다.
이 쿼리에서 :
DELETE FROM Trans WHERE (SELECT MAX(trainID));
처리 후 결과는 다음과 같습니다.
DELETE FROM Trans WHERE (true);
따라서 이것은 => DELETE FROM Trans
와 같고 모든 테이블 데이터가 삭제되는 이유입니다!
DELETE FROM Trans WHERE trainId = (SELECT MAX(trainID) FROM Trans );
출처
https://stackoverflow.com/questions/22049993