привет, у меня есть две таблицы, где таблица номер один предназначена для продукта, а таблица два - это категория, которую я хочу обновить с помощью этого SQL, но продолжаю получать синтаксическую ошибку
UPDATE product SET local_delivery = 0,none_local_delivery = 0,
WHERE EXISTS
(SELECT product.local_delivery,product.none_local_delivery
FROM product
INNER JOIN product_to_category ON product.product_id =
product_to_category.product_id WHERE
product_to_category.category_id = 90 )
1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с «ГДЕ СУЩЕСТВУЕТ» ( ВЫБРАТЬ продукт.local_delivery, product.none' в строке 4
удалена запятая (1093 - вы не можете указать целевую таблицу «продукт» для обновления в предложении FROM)
Хорошо, синтаксическая ошибка исправлена. Однако мне интересно, делает ли оператор обновления то, что вы хотите. Если в таблице есть товар с категорией 90, вы обновите все строки. Если нет, вы не будете обновлять строки.
Нет, нужно обновить список товаров, где идентификатор категории равен 90 @ThorstenKettner
Вы используете MySQL или SQL Server?
Я удалил тег SQL Server. Оба сообщения об ошибках указывают, что вы используете MySQL, а не SQL Server. Ошибка 1093 обсуждается здесь: stackoverflow.com/questions/44970574/…, но в вашем случае вам все равно не следует присоединяться к таблице продуктов в подзапросе.






используйте следующий синтаксис
UPDATE p
SET local_delivery = 0,
none_local_delivery = 0
FROM product AS p
WHERE EXISTS (SELECT 1
FROM product P
INNER JOIN product_to_category PCT
ON P.product_id =
PCT.product_id
WHERE PCT.category_id = 90);
Или следуйте синтаксису и удалите where exist
UPDATE p
SET local_delivery = 0,
none_local_delivery = 0
FROM product p
INNER JOIN product_to_category PTC
ON P.product_id = PTC.product_id
WHERE product_to_category.category_id = 90
Бессмысленный выбор любых столбцов в EXISTS
Причина, по которой его «бессмысленно», заключается в том, что EXIST не возвращает столбцы, а не «True», когда в подзапросе выполняются требования предложения «Where».
Спасибо за упоминание. Я исправил это.
Синтаксическая ошибка — это запятая прямо перед WHERE.
Затем ваш оператор обновления обновляет либо все строки таблицы, либо ни одной, в зависимости от того, существует ли продукт для категории 90.
Я предполагаю, что вместо этого вы хотите обновить все продукты категории 90. Для этого свяжите product_to_category с продуктом, который вы обновляете. Если мое предположение верно, запрос должен выглядеть так:
UPDATE product SET local_delivery = 0,none_local_delivery = 0
WHERE EXISTS
(
SELECT NULL
FROM product_to_category
WHERE product_to_category.product_id = product.product_id
AND product_to_category.category_id = 90
);
Или немного проще с IN:
UPDATE product SET local_delivery = 0,none_local_delivery = 0
WHERE product_id IN
(SELECT product_id FROM product_to_category WHERE category_id = 90);
я использовал немного проще с IN, и это сработало, большое спасибо
Перед
WHEREслишком много запятых.