Как вставить новые записи в таблицу из других таблиц при определенном условии?

Есть задача, разбить товары на несколько новых подкатегорий, то есть в каждой категории, сделать новые категории производителя. CMS Opencart.
В опенкарте есть страницы товаров определенного производителя, но они отображают все товары из всех категорий... а что бы как то уточнить все, думаю решение разбить на подкатегории..в каждой категории примерно 2-3 производителя, всего категорий, штук20

Запрос не верный , но возможно отражает суть.
INSERT INTO myocproduct_to_category SET product_id = moc.product_id, category_id = 280, main_category = 268 
SELECT moc.product_id, moc.model, ptc.category_id FROM myocproduct moc 
LEFT JOIN myocproduct_to_category ptc ON (moc.product_id = ptc.product_id)
LEFT JOIN myocmanufacturer maf ON (moc.manufacturer_id = maf.manufacturer_id )
WHERE moc.manufacturer_id = 128 AND ptc.category_id = 268
  • Вопрос задан
  • 129 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
INSERT INTO myocproduct_to_category (product_id, category_id, main_category)
SELECT moc.product_id, 280, 268
FROM myocproduct moc 
LEFT JOIN myocproduct_to_category ptc ON (moc.product_id = ptc.product_id)
LEFT JOIN myocmanufacturer maf ON (moc.manufacturer_id = maf.manufacturer_id )
WHERE moc.manufacturer_id = 128 AND ptc.category_id = 268

Вот так должно выглядеть, если правильно понял, что вы хотите сделать.

Собственно по селекту примечание отвлечённо от задачи, почему-то это крайне распространённая штука:
вы делаете LEFT JOIN myocmanufacturer, а затем строго фильтруете по moc.manufacturer_id = 128. NULL это условие никогда не пройдёт, значит эффективно вы делаете INNER JOIN, но при этом весьма и весьма мешаете оптимизатору. Аналогично с табличкой ptc
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы