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;