2012-03-29 7 views
2

Ich brauche eine Tabelle zu aktualisieren, und die Where-Klausel sollte den letzten (oder max) von einer bestimmten Spalte enthält, so hatte ich diese Abfrage:Wie man eine Select-Anweisung im Update macht?

UPDATE Orders 
SET Ordermethod='Pickup' 
WHERE orderid IN (
    SELECT MAX(orderid) 
    FROM Orders); 

Aber aus irgendeinem Grunde, den ich nicht verstehe, mysql gibt diesen Fehler zurück:

1093 - You can't specify target table 'Bestellingen' for update in FROM clause

ich verschiedene Abfragen versucht, die entweder nicht arbeiten ... Kann jemand helfen ??

Sorry für die crappy Englisch

+1

Ihr Englisch ist nicht beschissen! –

Antwort

3

Dies ist eine MySQL-Beschränkung. (Wie the documentation es ausdrückt: "Derzeit können Sie eine Tabelle nicht aktualisieren und aus der gleichen Tabelle in einer Unterabfrage auswählen.") Sie können die Einschränkung umgehen, indem Sie Ihre Unterabfrage als (SELECT * FROM (SELECT ...) t) schreiben, damit MySQL eine temporäre Tabelle für Sie erstellt:

UPDATE Orders 
    SET Ordermethod='Pickup' 
WHERE orderid IN 
     (SELECT * 
      FROM (SELECT MAX(orderid) 
        FROM Orders 
       ) t 
     ) 
; 
+0

Danke, es funktioniert :) – user1301563

+0

@ user1301563: Gern geschehen! :-) – ruakh

0

UPDATE Orders SET Ordermethod='Pickup' WHERE orderid IN(SELECT MAX(orderid) FROM ( SELECT * FROM Orders ) AS c1 )