Обновление таблицы Mysql с помощью предложения Join in Where - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь обновить свою таблицу, используя объединение в предложении where. Я написал следующий код

UPDATE  order_history SET Paidvalue = Paidvalue + item_id*1.1
    WHERE  type='addpack'
      and  Addstatus='Active'
      and  ( SELECT  count(i.ip)
                from  ip_ptc i
                inner join  order_history o  ON o.user_id=i.user_id
                                           and  i.date='2018-08-17'
           )>=4

, это дает ошибку You can't specify target table 'order_history' for update in FROM clause Мне нужно сравнить подсчет на основе user_id ссылка в таблице order_history и ip_ptc.в чем моя ошибка

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

он работал отлично, внося поправки в пункт слегка

 UPDATE order_history SET Paidvalue = Paidvalue + item_id*1.1 
 WHERE type='addpack' and Addstatus='Active' 
 and ( select * from ( select count(i.ip) from ip_ptc i inner join order_history o on o.user_id=i.user_id and i.date='2018-08-27' AND o.type='addpack' and o.Addstatus='Active' ) tmp)>=4
0 голосов
/ 27 августа 2018

Ошибка означает, что вы обновляете таблицу, из которой выбираете одновременно. Вы можете преодолеть это, построив временную таблицу в своем подзапросе

UPDATE order_history 
SET Paidvalue = Paidvalue + item_id*1.1
WHERE type='addpack' and Addstatus='Active'
and 
(
  select * from 
  (
    select count(i.ip) 
    from ip_ptc i 
    inner join order_history o on o.user_id=i.user_id and i.date='2018-08-17'
  ) tmp
) >= 4

Чтобы правильно считать, попробуйте это

UPDATE order_history h
JOIN 
(
    select user_id, count(i.ip) as cnt
    from ip_ptc 
    where ip_ptc.date = '2018-08-17'
    group by user_id 
) t on t.user_id = h.user_id and t.cnt >= 4
SET Paidvalue = Paidvalue + item_id*1.1
WHERE type='addpack' and Addstatus='Active'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...