2011-08-19 11 views
42

Esta es probablemente una tarea fácil ... ¿cómo puedo lograr lo que quiero con esta consulta:mySQL límite subconsulta

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

así, para decirlo en pocas palabras, quiero borrar todos los envíos que ISN 't en la última 15.

Cuando trato de esa consulta, entiendo que MySQL no soporta todavía' LÍMITE eN &/ALL/ANY/SOME subconsulta

EDITAR

 
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

¿Cuál es la versión de MySQL? ¿Cuál es el error EXACTO que da MySQL? – Shef

Respuesta

124

Prueba esto:

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

esta es la respuesta, solo te falta un parentisis de cierre final –

+0

tienes razón. Había agregado un paréntesis más de lo necesario. :) –

+6

Gracias. Es un poco ridículo que esto funcione, pero me alegra que sí. – Jase

8

Usted puede intentar esto:

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

Desde la más nueva 15 siempre vendrá desde el primer 15 si las ordenes al descender order.You puede simplemente eliminar cualquier ID eso no llegó a los primeros 15, así que lo intenté y funcionó bien. Esperanzadamente ayuda a alguien

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