SQL Как обновить INNER JOIN -
Пожалуйста, помогите мне разобраться в этом, так как я пробовал все с этого форума, но до сих пор не нашел решения.
Ну, у меня две таблицы:
Я хочу изменить значения двух полей, которые находятся в таблице.
И я просто дам конкретные значения этим.
Поля:
- prices.override(в котором я хочу дать значение 0) и
- prices.product_discount_id (в котором я хочу дать значение 66)
НО Я хочу изменить поля ТОЛЬКО для производителя с ID 31.
Итак, я сначала проверяю, что INNER JOIN отлично работает.
SELECT manufacturers.manufacturer_id,
prices.product_id,
prices.product_price,
prices.override,
prices.product_discount_id
FROM manufacturers
INNER prices
ON manufacturers.product_id=prices.product_id
AND manufacturers.manufacturer_id=31;
Но когда я пытаюсь обновить два поля, я не знаю, как это сделать.
Например, я попробовал это, но это не сработало:
UPDATE prices
SET prices.override=1
FROM
INNER JOIN prices
ON manufacturers.product_id=prices.product_id
AND manufacturers.manufacturer_id=31;
Я также пробовал это:
UPDATE prices
SET prices.override=1,
INNER JOIN manufacturers
ON prices.virtuemart_product_id = manufacturers.virtuemart_product_id
AND manufacturers.manufacturer_id=31;
Что я сделал неправильно? Обычно появляется сообщение об ошибке:
# 1064 - У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с ценами "FROM jos_virtuemart_product_prices" INNER JOIN jos_virtuemart_product_man в строке 3
Я читал что-то для псевдонима, но все равно никакого результата.
Любая помощь будет оценена!
Ответы
Ответ 1
У вас несколько синтаксических проблем, синтаксис MySQL UPDATE..JOIN
:
UPDATE T
JOIN t2 ON()
SET ..
WHERE ..
Во-вторых, после SET prices.override=1
у вас была ненужная запятая, поэтому:
UPDATE prices
INNER JOIN manufacturers
ON prices.virtuemart_product_id = manufacturers.virtuemart_product_id
AND manufacturers.manufacturer_id=31
SET prices.override=1
Ответ 2
Попробуйте, если вы используете SQL Server для mysql выше, это хорошо:
UPDATE p SET p.override=1
FROM prices p
INNER JOIN manufacturers ON
p.virtuemart_product_id =manufacturers.virtuemart_product_id
AND manufacturers.manufacturer_id=31;
Ответ 3
Это правильный синтаксис в MySQL:
UPDATE prices p JOIN
manufacturers m
USING (product_id)
SET p.override=1
WHERE m.manufacturer_id = 31;
Обратите внимание на использование псевдонимов таблиц. Они упрощают чтение и чтение запроса.
Синтаксис, который вы используете, подходит для SQL Server.
Ответ 4
UPDATE prices
SET prices.override=1
FROM manufacturers
INNER JOIN prices
ON manufacturers.product_id=prices.product_id
AND manufacturers.manufacturer_id=31;
Ответ 5
В MySQL синтаксис UPDATE
с JOIN
отличается, оператор SET
должен появиться после инструкции JOIN
.
Правильный UPDATE
запрос
UPDATE prices P
INNER JOIN manufacturers M ON P.virtuemart_product_id = M.virtuemart_product_id
AND M.manufacturer_id = 31;
SET P.override = 1;