Обновление нескольких значений в строке на основе имени внешнего ключа

#mysql #sql

#mysql #sql

Вопрос:

Я пытался исправить это в течение 2 часов и не могу найти решение

 Table product
 ---------------- ----------------- ------ ----- --------- ---------------- 
| Field          | Type            | Null | Key | Default | Extra          |
 ---------------- ------------------------ ----- --------- ---------------- 
| id             | int(10) unsigned| NO   | PRI | NULL    | auto_increment | 
| product_name   | varchar(255)    | NO   |     | NULL    |                | 
| product_cat_id | int             | NO   | FK  | NULL    |                |  
 ---------------- ----------------- ------ ----- --------- ---------------- 

table Product Category
 ---------------- ----------------- ------ ----- --------- ---------------- 
| Field          | Type            | Null | Key | Default | Extra          |
 ---------------- ----------------- ------ ----- --------- ---------------- 
| id             | int(10)         | NO   | PRI | NULL    | auto_increment | 
| category_name  | varchar(255)    | NO   | FK  | NULL    |                | 
 ---------------- ----------------- ------ ----- --------- ---------------- 
 

У меня есть 500 продуктов, и я должен установить product_cat_id для всех строк на основе названия категории продукта (клавиатура)

Как я могу добиться этого в MySQL?

это работает, как и ожидалось, однако ‘set.a.profile_category_id = 10’ не может быть жестко запрограммировано. Он должен быть УСТАНОВЛЕН.product_category_id = b.id где b.name = ‘Клавиатура’, но она работает не так, как ожидалось

 UPDATE product a 
    LEFT OUTER JOIN product_categories b
    ON a.product_category_id = b.id  
    SET a.product_category_id = 10
    ```
 

Комментарии:

1. обновите свой вопрос, добавьте также надлежащую выборку данных и ожидаемый результат

Ответ №1:

Если столбцы name из product и productcategory представляют одну и ту же информацию, вы можете использовать

 UPDATE product
INNER JOIN productcategory  ON productcategory.name = product.name
SET product.product _cat_id=  productcategory.id;