mysql - 根据选择删除

标签 mysql sql select sql-delete

我有一个非常复杂的 SELECT,它用 ids 填充临时表,基于此我需要创建 DELETE 查询。

例如,临时表的行如下所示:

- first_id | second_id | third_id
 - 1   | 222 | 342
 - 1   | 222 | 343
 - 1   | 223 | 551
  • ...

并查询:

DELETE FROM mytable WHERE CONCAT(first_id, 'X', second_id, 'X', third_id) IN (SELECT CONCAT(first_id, 'X', second_id, 'X', third_id) FROM temp_table);

但是这个查询太长了。当我显示PROCESSLIST时,我看到这个查询时间约为4000秒。

所以我的问题是,如何优化 DELETE 查询,根据 select FROM 另一个表从一个表中删除行,并根据 3 个键仅删除行?

最佳答案

您可以首先删除 CONCAT 并使用 JOIN 而不是子查询,尝试如下操作:

DELETE mt FROM mytable mt INNER JOIN temp_table tt ON mt.first_id = tt.first_id AND mt.second_id = tt.second_id AND mt.third_id = tt.third_id

关于mysql - 根据选择删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45305067/

相关文章:

php - 如何简化脚本

sql - 帮助树状结构

SQL 数字数据类型截断值?

sql - 选择$(美元符号)

mysql - 如何在表格中搜索多行?

mysql - SQL与模糊比较

MySQL 查询优化 LEFT JOIN 和 DISTINCT

php - 如何优化显示数千条数据的长查询

使用带有子查询和变量的 UNION ALL 的 MySQL 错误

sql - 如何查看hive变量的计算值