Alle Einträge bis auf den letzten löschen
Chris Masur
- datenbank
0 Rouven
Hallo,
in einer Datenbank sollen alle Datensätze gelöscht werden, ausgenommen davon ist der letzte/aktuellste.
Primary Key ist keiner vorhanden, besuch_zeit ist ein DATETIME-Feld.
Ich wähle also die gewünschten Datensätze aus, ordne sie nach Datum und lasse ab dem 2. Datensatz alles löschen:
DELETE FROM
tabelle
WHERE
bei=4 AND von=1
ORDER BY
zeit
DESC
LIMIT 1,100
Funktioniert leider nicht, er zeigt mir diesen Fehler:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '100' at line 1
Hello,
da ich meistens einen Bogen um die LIMIT-Klausel mache würde ich das Problem anders angehen - einzige Besonderheit bei meiner Lösung wären zwei oder mehr Einträge mit dem gleichen besuch_zeit Eintrag, die dann ALLE überleben würden:
DELETE FROM tabelle
WHERE bei = 4 AND von = 1 AND besuch_zeit < (
SELECT MAX(besuch_zeit) FROM tabelle WHERE bei = 4 AND von = 1
)
MfG
Rouven
DELETE FROM tabelle
WHERE bei = 4 AND von = 1 AND besuch_zeit < (
SELECT MAX(besuch_zeit) FROM tabelle WHERE bei = 4 AND von = 1
)
Da bringt er mir:
#1093 - You can't specify target table 'tabelle' for update in FROM clause
Ist halt komisch das das mit LIMIT nicht funktioniert obwohl es logisch hoch drei ist :-(
Hallo
DELETE FROM tabelle
WHERE bei = 4 AND von = 1 AND besuch_zeit < (
SELECT MAX(besuch_zeit) FROM tabelle WHERE bei = 4 AND von = 1
)
#1093 - You can't specify target table 'tabelle' for update in FROM clause
Ist halt komisch das das mit LIMIT nicht funktioniert obwohl es logisch hoch drei ist :-(
Es ist logisch, dass beides nicht geht. Das steht auch ganz genauso im Handbuch:
a) Subselect
<zitat>
Currently, you cannot delete from a table and select from the
same table in a subquery.
</zitat>
b) LIMIT:
<zitat>
~~~sql
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
[...]
The MySQL-specific LIMIT row\_count option to DELETE tells the server
the maximum number of rows to be deleted before control is returned
to the client
</zitat>
Freundliche Grüße
Vinzenz