@HeBonpoc

MYSQL: можно ли написать запрос на обновление если условие имеет join, count, group by и having?

Запрос на выбор ID товаров, у которых нет ни одной картинки:
select product.id as id, count(product_image.id) as COUNT from product left join product_image on product.id = product_image.product_id group by product.id having count = 0;

Как обновить эти товары?
Так, естественно, не сработало, потому что в подзапросе 2 колонки:
update product set disabled = 1 where id in (select product.id as id, count(product_image.id) as COUNT from product left join product_image on product.id = product_image.product_id group by product.id having count = 0);

Уже решил задачу таким запросом:
UPDATE 
product PRODUCT 
  LEFT JOIN product_image IMAGE 
    ON IMAGE.product_id = PRODUCT.id
    SET PRODUCT.disabled = 1
WHERE
  IMAGE.id is NULL;

Но это подошло только в этом частном случае. В следующий раз одними join и where можно не обойтись)
  • Вопрос задан
  • 2356 просмотров
Пригласить эксперта
Ответы на вопрос 2
Можно так
UPDATE product SET disabled = 1 WHERE id IN (
    SELECT product.id FROM product LEFT JOIN product_image ON product.id = product_image.product_id GROUP BY product.id HAVING COUNT(product_image.id) = 0);

а лучше так:
UPDATE product SET disabled = 1 WHERE NOT EXISTS (SELECT 1 FROM product_image WHERE product_id = product.id)
Ответ написан
Комментировать
Melkij
@Melkij
PostgreSQL DBA
table_reference у update ничем не отличается от select'а.
Тем же подзапросом left join (select /**/) as sub on /**/ можно получать данные.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы