@ademar26

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

Надо удалить строки из таблиц, пишу запрос
DELETE FROM ( SELECT * FROM `oc_product` p LEFT JOIN oc_product_description p2s ON (p.product_id = p2s.product_id) LEFT JOIN oc_product_to_category p3s ON (p.product_id = p3s.product_id) LEFT JOIN oc_category_description p4s ON (p3s.category_id = p4s.category_id) LEFT JOIN oc_product_to_store p5s ON (p.product_id = p5s.product_id) LEFT JOIN oc_product_to_layout p6s ON (p.product_id = p6s.product_id) WHERE p.manufacturer_id = '30' )


выдает ошибку. Если просто select то выбирается все.
  • Вопрос задан
  • 585 просмотров
Пригласить эксперта
Ответы на вопрос 2
qonand
@qonand
Software Engineer
DELETE
FROM
	`oc_product`
WHERE
	id IN (
		SELECT
			p.product_id
		FROM
			`oc_product` p
		LEFT JOIN oc_product_description p2s ON (
			p.product_id = p2s.product_id
		)
		LEFT JOIN oc_product_to_category p3s ON (
			p.product_id = p3s.product_id
		)
		LEFT JOIN oc_category_description p4s ON (
			p3s.category_id = p4s.category_id
		)
		LEFT JOIN oc_product_to_store p5s ON (
			p.product_id = p5s.product_id
		)
		LEFT JOIN oc_product_to_layout p6s ON (
			p.product_id = p6s.product_id
		)
		WHERE
			p.manufacturer_id = '30'
	)
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Учитывая, что используется только LEFT JOIN
DELETE FROM `oc_product` WHERE `manufacturer_id = '30'

Чтобы убрать записи из связанных таблиц надо сделать связи внешними ключами (FOREIGN KEY) с атрибутом ON DELETE CASCADE
Ответ написан
Ваш ответ на вопрос

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

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