Frage zu SQL-Befehl
-
Hallo Leute!
Ich hab eine MySQL Tabelle und arbeite in C unter Linux und hab mit einem Befehl ein Problem. Der Befehl sieht so aus:
sql = "UPDATE tabelle1 SET ID_LINK = (SELECT DISTINCT t2.PACKET_ID FROM tabelle1, (SELECT DISTINCT TIMESTAMP, PACKET_ID FROM tabelle1 WHERE SRC_IP IN (SELECT DISTINCT DST_IP FROM tabelle1 WHERE PACKET_ID)) AS t2 WHERE tabelle1.PACKET_ID = t2.PACKET_ID AND abs(unix_timestamp(tabelle1.TIMESTAMP) - unix_timestamp(t2.TIMESTAMP)) < 300)"; Es kommt immer dieser Fehler:
You can`t specify table 'tabelle1' for update in FROM clause
Wenn ich das "UPDATE tabelle1 SET ID_LINK = " weg lasse, gehts. Allerdings wird (logischerweise) nichts in meine Tablle eingetragen. Wo liegt denn da der Fehler? Wie kann ich den umgehen? Ein Beispiel wäre echt gut. Danke schon mal für euere Antworten!
Gruß
Buba
-
MySQL Handbuch schrieb:
Currently, you cannot update a table and select from the same table in a subquery.
siehe auch: http://dev.mysql.com/doc/refman/5.0/en/subquery-errors.html
ein Workaround: http://www.xaprb.com/blog/2006/06/23/how-to-select-from-an-update-target-in-mysql/
-
Danke für die Links. Es gibt nur ein Problem: Ich bin Newbie und kann damit nicht so recht was anfangen. Wie soll es denn richtig aussehen?
-
Erzeuge Dir doch einfache per CREATE eine Tabelle wo Du die Ergebnisse der
Unterabfage mit der Tabelle 'tabelle1' zwischenbunkerst.
http://www.techonthenet.com/sql/tables/create_table2.phpDann machst Du das UPDATE auf 'tabelle1' auf der Grundlage der Zwischentabelle.
Danach wirfst Du die Zwischentabelle per DROP TABLE weg.
-
Statt ner Zwischentabelle, würde ich eine View nehmen.