我有一个查询,在一个表中插入数据,从另一个表中检索数据,WHERE条件指定第一个表中的所有记录:
INSERT INTO `table_a` (`field_x`, `field_y`)
SELECT `field_x`, `field_y`
FROM `table_b`
WHERE `field_x` IN
(
SELECT `field_x`
FROM `table_a`
) ON DUPLICATE KEY UPDATE `field_y`=`table_b`.`field_y`, `field_x`=`table_b`.`field_x`
实际上,对于table_a的每个field_x
,我想从table_b
中选择所有field_x
和field_y
,然后通过插入所有返回的行来更新 table_a;
我已经知道将 IN 与子查询一起使用会很慢;
我不确定这是正确的方法,考虑到它也超慢,而且我也在问自己这种方法是否不是完全错误的。
这里有 SQL 专家可以帮助我找到解决问题的正确方法吗?
最佳答案
INSERT INTO `table_a` (`field_x`, `field_y`)
SELECT `table_b`.`field_x`, `table_b`.`field_y`
FROM `table_a`
join `table_b`
on DUPLICATE KEY UPDATE `table_a`.`field_y`=`table_b`.`field_y`
关于MySQL - INSERT INTO table SELECT WHERE field IN(子查询) - 使用 IN 使事情变得非常慢,正确的方法是吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30529162/