>데이터 베이스 >MySQL 튜토리얼 >DELETE 문에서 OFFSET을 사용하지 않고 MySQL에서 행 범위를 삭제하는 방법은 무엇입니까?

DELETE 문에서 OFFSET을 사용하지 않고 MySQL에서 행 범위를 삭제하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-25 17:21:021006검색

How to Delete a Range of Rows in MySQL without Using OFFSET in DELETE Statement?

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 문 내에 중첩된 하위 쿼리를 활용하면 행 범위를 정확하게 대상으로 지정하고 제거할 수 있습니다. 이 접근 방식에는 다음 단계가 포함됩니다.

  1. 원하는 범위 내 행의 식별자(예: 기본 키)를 선택하는 하위 쿼리를 사용하여 대상 행을 식별합니다. 이 하위 쿼리는 올바른 범위가 선택되도록 행의 순서를 적절하게 지정해야 합니다.
  2. IN 연산자를 사용하여 DELETE 문의 WHERE 절에 하위 쿼리를 통합합니다. 이렇게 하면 하위 쿼리로 식별된 행만 삭제 대상이 됩니다.

다음은 이 해결 방법을 사용하여 수정된 쿼리의 예입니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.