расширенное обновление в mysql - PullRequest
1 голос
/ 03 мая 2020

У меня есть таблица с именем «products», а другая таблица с именем «rate», которая имеет отношение один ко многим с таблицей «products». Для каждого продукта у меня есть две строки в таблице «ставок», которые я хочу обновить по одному логическому столбцу с именем «index» до 1 для каждого «продукта» в таблице «ставок».

Я использовал этот запрос:

UPDATE  ( SELECT 
             products.id AS productId,
             products.name ,
             X.`index` AS `index`, 
             x.id AS rateId, 
             x.price, x.discount

          FROM products JOIN ( SELECT rates.* 
                               FROM rates 
                             ) AS x

                WHERE products.id = x.product_id
                GROUP BY products.id
            ) AS y
SET y.index = 1

но id получил эту ошибку, массаж:

SQL Ошибка (1288) целевая таблица y обновления не может быть обновлена ​​

i ' Я новичок в mysql, и я не знаю, где моя ошибка. Спасибо за помощь

Таблица продуктов

| id  |  name    
| 1   |  chair
| 2   |  bench

Таблица тарифов

| id  |  product_id  | index | value
|  1  |       1      |   0   |   xx   ==> index = 1
|  2  |       1      |   0   |   yy
|  3  |       2      |   0   |   zz   ==> index = 1
|  4  |       2      |   0   |   tt

i хочу обновить столбец индекса для каждого продукта в ставках до 1

1 Ответ

1 голос
/ 03 мая 2020

Похоже, вы хотите update "первую" строку в rates для каждого product_id. Если это так, вы можете самостоятельно объединить таблицу с помощью совокупного запроса, который вычисляет минимум id на product_id:

update rates r
inner join (select product_id, min(id) id from rates group by product_id) r1 
    on r1.id = r.id
set r.index = 1
...