2017-01-24 3 views
-2

Я пытаюсь избавиться от всех значений NULL и заменить их знаком = в столбце size_prefix из результатов запроса. Я продолжаю получать ошибку SYNTAX, хотя я не могу понять, где я ошибаюсь. Буду признателен за любую оказанную помощь. БлагодаряОбновить a Выбрать запрос

Я получаю

Error # 1064 - У Вас есть ошибка в вашем SQL синтаксиса; в руководстве,> соответствует версии сервера MySQL для правильного синтаксиса использовать вблизи 'IN (> SELECT dimension_prefix, length, width, height, ВОП. name, p.`product_i' в> линия 1

UPDATE oc_product_option_value_dimension SET dimension_prefix = '='  WHERE dimension_prefix IS NULL IN(
SELECT `dimension_prefix`,`length`,`width`,`height`,ovd.`name`,p.`product_id`,pov.product_option_value_id 

FROM (SELECT product_id FROM `oc_product` ORDER BY product_id ASC) AS p 
LEFT JOIN `oc_product_option_value` pov ON  pov.product_id=p.product_id 
LEFT JOIN `oc_product_option_value_dimension` povd ON povd.product_option_value_id=pov.product_option_value_id 
LEFT JOIN `oc_option_value_description` ovd ON ovd.option_value_id=pov.option_value_id 
LEFT JOIN `oc_option_description` od ON od.option_id=ovd.option_id 
WHERE ovd.`name` regexp '^[0-9]+') 
+1

и ваша ошибка? ... – Siyual

+1

Давайте посмотрим... у вас есть подзапрос для в том, что возвращает мильон столбцы и вы хотите знать, где ошибка? –

ответ

1
Actually you are trying is null in .. which is giving you the syntax error. 

UPDATE oc_product_option_value_dimension SET dimension_prefix = '=' 
    WHERE coalesce(dimension_prefix,"@@") = (
     SELECT coalesce(`dimension_prefix`,"@@") 
     FROM (SELECT product_id FROM `oc_product` ORDER BY product_id ASC) AS p 
     LEFT JOIN `oc_product_option_value` pov ON  pov.product_id=p.product_id 
     LEFT JOIN `oc_product_option_value_dimension` povd ON povd.product_option_value_id=pov.product_option_value_id 
     LEFT JOIN `oc_option_value_description` ovd ON ovd.option_value_id=pov.option_value_id 
     LEFT JOIN `oc_option_description` od ON od.option_id=ovd.option_id 
     WHERE ovd.`name` regexp '^[0-9]+') 
+0

что такое NVL? и что она делает? – Astrea

+0

@Astrea жаль, мой плохой. NVL работает в oracle для обработки нулевых значений. Подобно coalesce. обновил ответ –

+0

Большое вам спасибо за вашу помощь. Это вызывает новую ошибку # 1093. Вы не можете указать целевую таблицу «oc_product_option_value_dimension» для обновления в предложении FROM. Что из этого вопроса http://stackoverflow.com/questions/45494/mysql-error-1093-cant-specify-target-table-for-update-in-from-clause. я узнал, что это потому, что я использую oc_product_option_value в своем заявлении Select – Astrea

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

  • Нет связанных вопросов^_^