MySQL запрос с использованием UPDATE, CASE и LEFT JOIN в одном запросе - PullRequest
0 голосов
/ 28 сентября 2018

пытается получить эту комбинацию «ОБНОВЛЕНИЕ», «УСТАНОВКА» с «СЛУЧАЯМИ» И ЛЕВЫМ СОЕДИНЕНИЕМ к работе, кто-нибудь сможет мне помочь?

UPDATE `cataloginventory_stock_item`         
SET `csi`.`qty` = 
    CASE 
        WHEN `cpe`.`sku` = '03352828' THEN '1000'
        WHEN `cpe`.`sku` = '04975135' THEN '15150'  
    END
FROM `cataloginventory_stock_item` csi
LEFT JOIN `catalog_product_entity` cpe 
ON `csi`.`product_id` = `cpe`.`entity_id`

Но выдает синтаксическую ошибку:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use 
near 'FROM `cataloginventory_stock_item` csi LEFT JOIN `catalog_product_entity` cpe O' at line 7 

Помогло бы радикально сократить количество запросов на обновление.

1 Ответ

0 голосов
/ 28 сентября 2018

Нельзя использовать предложение FROM в запросе UPDATE.При обновлении необходимо «собрать» таблицы и затем использовать SET.

. Выполните следующие действия:

UPDATE `cataloginventory_stock_item` AS csi 
LEFT JOIN `catalog_product_entity` cpe 
ON `csi`.`product_id` = `cpe`.`entity_id` 
SET `csi`.`qty` = 
    CASE 
        WHEN `cpe`.`sku` = '03352828' THEN '1000'
        WHEN `cpe`.`sku` = '04975135' THEN '15150'  
    END

Синтаксис предложения Update :

UPDATE [LOW_PRIORITY] [IGNORE] table_reference
    SET assignment_list
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]

value:
    {expr | DEFAULT}

assignment:
    col_name = value

assignment_list:
    assignment [, assignment] ...
...