使用sql在表之间查找不匹配的行

时间:2016-02-10 17:19:34

标签: mysql sql select sql-insert

我试图使用SQL查找2个表之间的所有不匹配的行。 表codes包含600万个条目,表burnt包含1百万个条目。 我尝试过使用INSERT INTO SELECT,但这不起作用,一段时间后就崩溃了。

INSERT INTO unburnt
SELECT
    *
FROM
    codes T2
WHERE
    NOT EXISTS (SELECT *
        FROM
           burnt T1
        WHERE
           T1.code = T2.code)

任何不匹配的行都应放入unburnt表中。 处理此查询的最佳方法是什么?

所有3个表的数据库表结构都相同。

  • ID
  • 代码(TEXT)

  • ID
  • 代码(TEXT)

未燃

  • ID
  • 代码(TEXT)

1 个答案:

答案 0 :(得分:0)

尝试将INSERT分解为一组较小的INSERTS:

INSERT INTO unburnt SELECT * ....  WHERE T1.code = T2.code and T2.ID between 1 and 100000) 
INSERT INTO unburnt SELECT * ....  WHERE T1.code = T2.code and T2.ID between 100001 and 200000)
etc.