2012-11-22 39 views
18

Tôi đang có một số nhầm lẫn về Xóa thứ tự Hàng trên cùng của một số cột.Xóa các hàng Top-N 'từ một Bảng với một số sắp xếp (thứ tự theo' Cột ')

Tôi đã tạo ví dụ tại đây Example at fiddle

Điều gì là sai với các truy vấn này?

Delete Top(3) from Table1 order by id desc 

Delete Top(3) from Table1 
where id IN (select id from Table1 order by id desc) 

Vì trong mysql từ khóa giới hạn không được công việc rất tốt

Trả lời

43

Bạn có thể sử dụng một CTE để làm một faster ordered delete mà không cần một truy vấn phụ riêng biệt để truy xuất 3 id hàng đầu.

WITH T 
    AS (SELECT TOP 3 * 
     FROM Table1 
     ORDER BY id DESC) 
DELETE FROM T 
+1

Đây là câu trả lời _THE_ ... Cảm ơn. –

9

Thêm mệnh đề top 3 đến subselect:

Delete from Table1 
where id IN (
    select top 3 id 
    from Table1 
    order by id desc 
) 
+1

Hãy rất thận trọng khi sử dụng 'IN' tham chiếu cùng một bảng. Tôi đã có một truy vấn rất giống nhau để xóa 3 hàng, nhưng 'ORDER BY' là khác nhau và chắc chắn nó không xóa 3 hàng. Tôi đã không nhận ra sự liên kết. –

Các vấn đề liên quan