#1241 Operand should contain 1 column(s)

268
24 марта 2018, 14:20

Здравствуйте. Подскажите, пожалуйста, как правильно сделать запрос? Делаю

update catalog
    set catalog.id_cat = case when catalog.id_cat_1s = ""
        then "0" else (select id, idp_1c from catalog as t1 where 
            t1.idp_1c = catalog.id_cat_1s) end
where catalog.id >= 1 and catalog.id < 500;

и вываливается ошибка #1241 Operand should contain 1 column(s)

Если делаю вот такой запрос

UPDATE catalog
left JOIN catalog AS table1
    ON catalog.id_cat_1s = table1.idp_1c
       COLLATE utf8_unicode_ci
SET catalog.id_cat = case when catalog.id_cat_1s = ""
    then "0" else table1.id end
where catalog.id >= 1 and catalog.id < 500;

то все отрабатывает нормально. Возможно ли сделать такое без join'ов, т.к. с join'ом запрос обрабатывает где-то 10 000 строк и делает это 15 минут, уж как-то долго? Или может подскажете другой метод, чтоб делать это быстрее?

UPD: решение:

update catalog
    set catalog.id_cat = case when catalog.id_cat_1s = "" then "0" 
        else (select id from
            (select id, idp_1c from catalog) as t1
            where t1.idp_1c = catalog.id_cat_1s)
    end;

В итоге выполнение запроса с 15 минут снизилось до 658мс. (10175 rows affected in 658ms)

Answer 1

А почему не просто

UPDATE catalog AS t0
LEFT JOIN (SELECT id, idp_1c FROM catalog) AS t1 ON t1.idp_1c = t0.id_cat_1s
SET t0.id_cat = COALESCE(t1.id,0)

?

UPD: И правда, зачем нам подзапрос?

UPDATE catalog AS t0
LEFT JOIN catalog t1 ON t1.idp_1c = t0.id_cat_1s
SET t0.id_cat = COALESCE(t1.id,0)

Само собой желательно наличие индексов по idp_1c (ещё лучше, наверное - по (idp_1c,id)) и id_cat_1s

READ ALSO
SQL выбрать число из диапазона двух дат

SQL выбрать число из диапазона двух дат

Как можно выбрать число из диапазона двух дат DDMM? Если, к примеру, столбец from будет 21

246
Как обновить определенные ячейки в mysql?

Как обновить определенные ячейки в mysql?

Есть таблица в mysql, в ней первая колонка 'auto-increment'Следующая - ссылка на youtube канал

211
sql запросы на добавление товара в WooCommerce

sql запросы на добавление товара в WooCommerce

Народ привет!Подскажите какие sql запросы использует WooCommerce для полного добавления одного товара(с картинкой)Или есть ли способ отследить...

241