2013-09-03 3 views
2

Я пытаюсь обновить 1 столбец на основе, если category_id равен 90 во второй таблице, но получает неизвестную ошибку столбца.Операция обновления, указывающая ошибку столбца uknown

Вот мой SQL:

UPDATE products SET qty='20' 
WHERE products.products_id = products_to_categories.products_id AND products_to_categories.categories_id = '90' 

Ошибка я получаю

Неизвестный столбец 'products_to_categories.products_id' в 'где предложение'

ответ

2

В SQL, вы должны ввести таблицу имена с from (или update или delete). Вы можете в виду:

UPDATE products 
    SET qty = '20' 
    WHERE exists (select 1 
        from products_to_categories ptc 
        where ptc.products_id = products.products_id AND 
         ptc.categories_id = '90' 
       ); 

Другой способ сделать это с помощью объединения:

UPDATE products p join 
     products_to_categories ptc 
     on ptc.products_id = products.products_id AND 
      ptc.categories_id = '90' 
    SET p.qty = '20'; 

Это работает лучше, если есть более чем один матч.

+0

Разве это не первое условие внутри внутреннего ИНЕКЕ лишними? – Itay

+0

Вы имеете в виду, что способ, которым он пишет свой запрос sql, подходит только для обновления только из одной таблицы? – SaidbakR

+0

@Itay. , , Исправлена. Думаю, я выбирал между '=' и 'exist' и получил оба. –

0

Вы не можете комбинировать две таблицы в команде UPDATE. Используйте подзапрос.

UPDATE products SET qty='20' 
WHERE products.products_id IN (SELECT `ptc`.`products_id` 
           FROM `products_to_categories` `ptc` 
           WHERE `ptc`.categories_id = '90') 
0

вам необходимо включить таблицу в вашем присоединиться к заявлению, products_to_categories.products_id не может быть найден, если таблица не соединена.

UPDATE products a 
     INNER JOIN products_to_categories b 
      ON a.products_id = b.products_id 
SET a.qty = '20' 
WHERE b.categories_id = '90' 
0

Вы можете использовать в MySQL multiple table syntax:

UPDATE products 
JOIN products_to_categories 
    ON products.products_id = products_to_categories.products_id 
    AND products_to_categories.categories_id = '90' 
SET qty='20' 

Смотрите этот синтаксис запроса проверяется на SQLFddile.

+0

@Boheman. , , Я не думаю, что это синтаксис MySQL. –

+0

@gordon me no :) Я собираюсь попробовать скрипку – Bohemian

+0

. , В качестве примечания я не спустил вас вниз. Я больше ничего не делаю. –

0
UPDATE products p, products_to_categories pc 
SET p.qty='20' 
WHERE p.products_id = pc.products_id AND pc.categories_id = '90' 

FIDDLE

Смежные вопросы