dedlfix: Anzahl der Einträge einer MySQL-Tabelle kürzen

Beitrag lesen

Tach!

DELETE FROM nachrichten WHERE id NOT IN

(
    SELECT id
    FROM nachrichten
    ORDER BY datum DESC
    LIMIT 0 , 100
)

  

> > da kriege ich leider diesen Fehler  
> > This version of MySQL doesn't yet support 'LIMIT IN/ALL/ANY/SOME subquery'  
  
Das, hab ich ja schon in der Revidierung meines ersten Vorschlags erwähnt, geht sowieso nicht, weil MySQL keine Subquerys auf dieselbe Tabelle unterstützt, wenn die Hauptquery schreibende Operationen vornimmt (zumindest DELETE und UPDATE sind davon betroffen).  
  

> kann man Mysql mit  
> ~~~sql
  

> DELETE FROM `nachrichten` WHERE `id` NOT IN (  
>     SELECT * FROM (  
>         SELECT `id`  
>         FROM `nachrichten`  
>         ORDER BY `datum` DESC  
>         LIMIT 0 , 100  
>     ) as t  
> )

überlisten?

Zumindest MySQL 5.5 kann damit aber umgehen. Hier wird vermutlich wegen der t-Subquery implizit eine temproräre Tabelle angelegt, was die oben erwähnte Limitierung umgeht. Ob damit allerdings auch die LIMIT-Beschränkung (in Mareikes Version) aufgehoben ist, konnte ich dem Handbuch nicht entnehmen.

dedlfix.