Sven Rautenberg: MysQL - DELETE ab dem x-ten Eintrag pro ID

Beitrag lesen

Moin!

Das ganze geht IMHO nur mit einem Subselect.

Nein. Da liegst Du falsch.

Schön, dass die Ideen so eindeutig richtig oder falsch zu sein scheinen. :)

DELETE
FROM
  tabelle
WHERE
  id = 10
AND
  datum <=
     (
       SELECT datum FROM tabelle WHERE id = 10 ORDER BY datum DESC LIMIT 10, 1
     );


>   
> Dummerweise haben die nächsten 5 Datensätze ebenfalls das gleiche Datum wie der 11. Eintrag. Es bleiben nur noch 5 Datensätze übrig, keine 10 wie gefordert.  
  
MySQL hat auch in Version 5.1 die Einschränkung, dass man kein Subselect auf die Tabelle machen kann, aus der man löschen will. Insofern funktioniert der Ansatz ohnehin nicht.  
  

> Wenn schon Subselect, dann finde eine Spalte, die die 10 Datensätze, die übrig bleiben sollen genau identifiziert und verwende `WHERE ... NOT IN (SELECT ...)`{:.language-sql}.  
  
Auch dein Ansatz übrigens nicht.  
  
Aber es gibt eine recht simple Methode: DELETE kann ORDER BY und LIMIT.  
  
Dabei ist jetzt allerdings die genaue Fragestellung zu berücksichtigen: Der OP hat gefordert, dass \_maximal\_ 10 Datensätze übrig bleiben. Damit ist die Aufgabe unterspezifiziert, denn auch 0 Datensätze wären ja \_maximal\_ 10, was die Löschaufgabe erheblich vereinfachen würde, aber aus nachvollziehbaren Gründen kaum sinnvoll erscheint.  
  
 - Sven Rautenberg

-- 
"Love your nation - respect the others."