2011-08-19 29 views
42

Đây có lẽ là một điều dễ dàng ... làm thế nào tôi có thể đạt được những gì tôi muốn với truy vấn này:mySQL hạn subquery

delete from posts where id not in 
(SELECT id FROM posts order by timestamp desc limit 0, 15) 

như vậy, để đặt nó trong một nutshell, tôi muốn xóa tất cả các bài mà isn 't trên mới nhất 15.

Khi tôi cố gắng truy vấn đó, tôi nhận được rằng MySQL chưa hỗ trợ' LIMIT & IN/ALL/BẤT CỨ/MỘT SỐ subquery

EDIT

 
mySQL Server version: 5.5.8 
mySQL Client version: mysqlnd 5.0.7-dev - 091210 - $Revision: 304625 $ 
Error: #1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' 
+0

Phiên bản MySQL là gì? Lỗi chính xác MySQL đưa ra là gì? – Shef

Trả lời

124

Hãy thử điều này:

DELETE 
FROM posts 
WHERE id not in (
     SELECT * FROM (
      SELECT id 
      FROM posts 
      ORDER BY timestamp desc limit 0, 15 
    ) 
     as t); 
+0

đây là câu trả lời, bạn chỉ thiếu một phụ huynh cuối cùng đóng cửa –

+0

bạn nói đúng. Tôi đã thêm một dấu ngoặc đơn nhiều hơn mức cần thiết. :) –

+6

Cảm ơn bạn. Đó là loại vô lý mà điều này hoạt động, nhưng tôi vui vì nó. – Jase

8

Bạn có thể thử này:

DELETE 
    p1.* 
FROM 
    posts p1 INNER JOIN 
    (SELECT 
      id 
    FROM 
      posts 
      ORDER BY timestamp DESC 
      LIMIT 0, 15 
    ) AS p2 
ON p1.id = p2.id; 
1

Kể từ khi mới 15 sẽ luôn đến từ 15 đầu tiên nếu bạn đặt chúng bằng cách giảm dần order.You chỉ có thể xóa bất kỳ id mà đã không làm cho nó vào 15. đầu tiên như vậy tôi chỉ cần thử nó và nó đã làm việc tốt. Hy vọng nó giúp ai đó

Delete from `table` where id not in (SELECT * FROM (Select id from `table` order by id desc limit 15) as derivedTable);