(MySQL) -> Letzten 40 Eintraege verschieben in andere Tabelle
Hans Watzinger
- datenbank
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
mysql>
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
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
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