[sql] DELETE 문을 사용하여 테이블의 특정 열을 기준으로 BOTTOM N개의 레코드 삭제 방법

보통 데이터베이스에서 레코드를 삭제할 때는 WHERE 절을 사용하여 특정 조건에 맞는 레코드를 삭제합니다. 하지만 여기서는 특정 열을 기준으로 BOTTOM N개의 레코드를 삭제하는 방법에 대해 알아보겠습니다.

예를 들어, 아래와 같은 테이블이 있다고 가정해봅시다.

CREATE TABLE users (
  id INT PRIMARY KEY,
  name VARCHAR(20),
  created_at DATETIME
);

users 테이블의 created_at 열을 기준으로 가장 오래된 N개의 레코드를 삭제하고 싶다고 가정해봅시다. 이 경우에는 아래와 같은 SQL문을 사용할 수 있습니다.

DELETE FROM users
WHERE id IN (
  SELECT id
  FROM (
    SELECT id
    FROM users
    ORDER BY created_at ASC
    LIMIT N
  ) AS temp
);

위의 SQL문에서는 INNER QUERY를 사용하여 created_at 열을 기준으로 오름차순으로 정렬한 뒤, LIMIT N을 사용하여 가장 오래된 N개의 레코드의 id 값을 가져옵니다. 그 후, 이를 WHERE 절의 IN 연산자와 함께 사용하여 해당 id 값을 가진 레코드를 삭제합니다.

이렇게 하면 테이블의 특정 열을 기준으로 BOTTOM N개의 레코드를 삭제할 수 있습니다.

참고 자료: