热修复使用连接的更新在 MySQL 中不起作用

Hot to fix update using join not working in MySQL

MySQL / InnoDB

我想将 table countrylanguage_id 填写为:

id name      language language_id
1  USA       English  1
2  France    French   2
3  Indonesia NULL     NULL

发件人:

language

    id name
    1  English
    2  French

现在 country.language_id 没有值,我想从 language table

中填充

没有语言名称的国家(印度尼西亚),其country.language_id可以是0或NULL

SQL:

UPDATE country
SET language_id = language.id,  
FROM country
INNER JOIN language ON country.language = language.name

它不工作。

设置country.language_id后,我将删除country.language列并在country.language_idlanguage.language_id

上创建外键关系

我认为我们可以尝试对 UPDATE 语句使用 OUTER JOIN,并且该语句可能需要在 MySQL 中的 SET 之前使用 JOIN

UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET assignment_list
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]

所以我们可以像下面这样使用。

UPDATE country
LEFT JOIN language ON country.language = language.name
SET country.language_id = language.id 

sqlfiddle

您可以像这样在更新查询中简单地使用 LEFT JOIN

UPDATE country c
LEFT JOIN language l ON c.language = l.name
SET language_id = l.id;

DB FIDDLE DEMO