2012-03-29 2 views
2

мне нужно обновить таблицу, и где пункт должен содержать последнюю (или более) из определенной колонки, поэтому я сделал этот запрос:Как сделать заявление выбора в обновлении?

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

Но, по какой-то причине я не понимаю, MySQL возвращает эту ошибку:

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

Я пробовал различные запросы, которые не работают либо ... Может кто-то помочь ??

Извините за дерьмовый английский

+1

Ваш английский не дерьмовый! –

ответ

3

Это ограничение MySQL. (Как указывает the documentation: «В настоящее время вы не можете обновить таблицу и выбрать одну и ту же таблицу в подзапросе».) Вы можете обойти это ограничение, написав ваш подзапрос как (SELECT * FROM (SELECT ...) t), чтобы MySQL создавал для вас временную таблицу:

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

Спасибо, это работает :) – user1301563

+0

@ user1301563: Добро пожаловать! :-) – ruakh

0

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

Смежные вопросы