热修复使用连接的更新在 MySQL 中不起作用
Hot to fix update using join not working in MySQL
MySQL / InnoDB
我想将 table country
的 language_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_id
和language.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
您可以像这样在更新查询中简单地使用 LEFT JOIN
:
UPDATE country c
LEFT JOIN language l ON c.language = l.name
SET language_id = l.id;
MySQL / InnoDB
我想将 table country
的 language_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_id
和language.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
您可以像这样在更新查询中简单地使用 LEFT JOIN
:
UPDATE country c
LEFT JOIN language l ON c.language = l.name
SET language_id = l.id;