MySQL - INSERT INTO table SELECT WHERE field IN(子查询) - 使用 IN 使事情变得非常慢,正确的方法是吗?

标签 mysql subquery where-in insert-select

我有一个查询,在一个表中插入数据,从另一个表中检索数据,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_xfield_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/

相关文章:

php - 具有一对一关系的 Eloquent 更新

mysql - mysql 每个时期的总用户数

MySQL移动平均线计算

sql - 避免子查询

php - SQL - 多对多 - 如何在一个查询中完成?

php - 我可以将数组绑定(bind)到 PDO 查询中的 IN() 条件吗?

python - Oracle WHERE 子查询中的多个列 "cx_Oracle.DatabaseError: ORA-00920: invalid relational operator"

python - 使用 MySQLdb 执行 "SELECT ... WHERE ... IN ..."

mysql - 如何找到只有好友发的帖子?

mysql - 如何在 ruby​​ on rails 中编写嵌套查询?