집 >데이터 베이스 >MySQL 튜토리얼 >DELETE 문에서 OFFSET을 사용하지 않고 MySQL에서 행 범위를 삭제하는 방법은 무엇입니까?
MySQL에서 범위가 있는 행 삭제
MySQL에서 LIMIT 절을 사용하여 테이블에서 특정 범위의 행을 삭제하려고 할 때, 오류가 발생할 수 있습니다. 설명을 위해 다음 쿼리는 타임스탬프 기준으로 내림차순으로 정렬된 20번째 행부터 시작하여 50개 행 범위를 삭제하는 것을 목표로 합니다.
DELETE FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50;
그러나 이 쿼리를 실행하면 다음으로 인해 오류 메시지가 발생합니다. 특히 OFFSET 값(50)에 잘못된 구문이 있습니다.
DELETE 문에서 LIMIT 절의 제한
오류의 근본 원인은 LIMIT 절을 사용할 수 없다는 데 있습니다. DELETE 문의 LIMIT 절에 OFFSET이 있습니다. 이는 LIMIT 및 OFFSET을 모두 사용하여 검색할 시작점과 행 수를 지정할 수 있는 SELECT 문과의 중요한 차이점입니다.
범위 삭제 해결 방법
To 이 제한을 피하려면 해결 방법이 필요합니다. DELETE 문 내에 중첩된 하위 쿼리를 활용하면 행 범위를 정확하게 대상으로 지정하고 제거할 수 있습니다. 이 접근 방식에는 다음 단계가 포함됩니다.
다음은 이 해결 방법을 사용하여 수정된 쿼리의 예입니다.
DELETE FROM `chat_messages` WHERE `id` IN ( SELECT `id` FROM ( SELECT `id` FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50 ) AS `x` )
이 쿼리에서 기본 특정 시나리오에서는 적절한 열 이름으로 수정될 수 있지만 키 열 ID가 가정됩니다.
위 내용은 DELETE 문에서 OFFSET을 사용하지 않고 MySQL에서 행 범위를 삭제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!