代码之家  ›  专栏  ›  技术社区  ›  Michal Palus

基于选择删除

  •  0
  • Michal Palus  · 技术社区  · 8 年前

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

    - 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秒。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Omar EDDASSER    8 年前

    您可以从删除 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