2013-04-16 2 views
0

Я искал, но я до сих пор не понимаю, почему это неправильно. Я проверил подзапросы, и они возвращают только 1 строку.Ошибка 1093. Вы не можете указать целевую таблицу «ps_order_history» для обновления в разделе FROM.

UPDATE ps_order_history 

SET id_order_state = 18 

WHERE id_order = 
(
    SELECT max(p.id_order) 
    FROM ps_orders p 
    INNER JOIN ps_order_detail d ON d.id_order = p.id_order 
    INNER JOIN ps_order_history oh ON oh.id_order = p.id_order 
    WHERE d.product_name = "Academia Mastermaq" 

    AND p.id_customer = 
    (
     SELECT id_customer 
     FROM ps_customer 
     WHERE firstname = "Cristiano" 
     AND lastname = "Ferreira dos Santos" 
     LIMIT 1 
    ) 
) 

Error Code: 1093. You can't specify target table 'ps_order_history' 
for update in FROM clause 

Спасибо!

+1

Вы не можете обновить таблицу, которую вы выбираете. например ваше обновление работает на 'ps_order_history', и вы выбираете из' ps_order_history' как одно из объединенных полей в вашем подселекторе WHERE. –

+0

Я вижу. Спасибо, я решил проблему. –

ответ

0

Теперь я знаю, что не могу присоединиться к моей таблице обновлений в подзапросе. Благодаря Marc B!

UPDATE ps_order_history h 
INNER JOIN ps_order_detail d ON d.id_order = h.id_order 

SET h.id_order_state = 15 

WHERE d.product_name = "Academia Mastermaq" 
AND h.id_order = 
(
    SELECT max(p.id_order) 
    FROM ps_orders p 
    /*INNER JOIN ps_order_detail d ON d.id_order = p.id_order 
    INNER JOIN ps_order_history oh ON oh.id_order = p.id_order*/ 


    WHERE p.id_customer = 
    (
     SELECT id_customer 
     FROM ps_customer 
     WHERE firstname = "Cristiano" 
     AND lastname = "Ferreira dos Santos" 
     LIMIT 1 
    ) 
) 
Смежные вопросы

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