Hans Watzinger: (MySQL) -> Letzten 40 Eintraege verschieben in andere Tabelle

Hallo!

Bitte um korrektur:

mysql> INSERT INTO aaa VALUES (id,foo,bar,test,cool) SELECT (id,foo,bar,test,cool) FROM bbb order by id desc limit 40,1000000;
ERROR 1064: You have an error in your SQL syntax near 'SELECT (id,foo,bar,test,cool) FROM bbb order by id desc limit 40,10000' at line 1
mysql>

Was ich machen will:

Die 40 letzten eintrage,
sprich die 40 eintraege mit der höchsten ID,
sollen in der Tabelle "bbb" bleiben.

Und alle anderen die aelter sind als die letzten 40,
sollen in die Tabelle aaa verschoben werden.

Verschoben im Sinn vol auslesen,
in der anderen Tabelle eintragen,
und dann aus der alten Tabelle löschen.

Nur das was ich da versuchte geht nicht.

Bitte um einen validen syntax,
mit der MySQL Dokumentation kam ich nicht weiter als zu dem was ich oben postete.

Danke
Hans Watzinger

  1. Hallo,

    mysql> INSERT INTO aaa VALUES (id,foo,bar,test,cool) SELECT (id,foo,bar,test,cool) FROM bbb order by id desc limit 40,1000000;
    ERROR 1064: You have an error in your SQL syntax near 'SELECT (id,foo,bar,test,cool) FROM bbb order by id desc limit 40,10000' at line 1

    INSERT INTO aaa (id,foo,bar,test,cool) SELECT id,foo,bar,test,cool FROM bbb WHERE id < -- ID HIER EINFUEGEN -- ORDER BY id DESC;
    DELETE FROM bbb WHERE ID < -- ID HIER EINFUEGEN -- ;

    Die 40 letzten eintrage,
    sprich die 40 eintraege mit der höchsten ID,
    sollen in der Tabelle "bbb" bleiben.
    Und alle anderen die aelter sind als die letzten 40,
    sollen in die Tabelle aaa verschoben werden.

    Suche Dir die ID aus, die das 40letzte Element darstellt und baue sie in die beiden oberen Anweisungen ein. LIMIT ist hier ungeeignet, da Du ja löschen musst. (Du kannst höchstens vorher mit LIMIT die 40 letzten auslesen (ORDER BY ID desc LIMIT 40), und dann die ID von der _letzten_ Zeile nehmen) Ich gehe hier natürlich davon aus, dass die ID ständig hochzählt, sonst funktioniert das ganze nicht...

    Ach ja, warum solltest Du so etwas überhaupt wollen?

    Christian

    --
    Ich bitte darum, dass ein Themenbereich (BARRIEREFREIHEIT) eingerichtet wird.
  2. Hi folks

    mysql> INSERT INTO aaa VALUES (id,foo,bar,test,cool) SELECT (id,foo,bar,test,cool) FROM bbb order by id desc limit 40,1000000;

    <cite>
    INSERT [LOW_PRIORITY] [IGNORE] [INTO] tabelle [(spalten_liste)] SELECT ...
    </cite>

    also

    INSERT INTO aaa (id, ...) SELECT ...

    Laß mal das "Values" weg.
    Und überdenke Dein Limit.

    Gruß
    timothy