用sql查找表之间不匹配的行
Posted
技术标签:
【中文标题】用sql查找表之间不匹配的行【英文标题】:Find unmatched rows between tables with sql 【发布时间】:2016-02-10 17:19:34 【问题描述】:我正在尝试使用 SQL 查找 2 个表之间的所有不匹配行。
表codes
包含600 万个条目,表burnt
包含100 万个条目。
我曾尝试使用INSERT INTO SELECT
,但这不起作用,它在一段时间后崩溃了。
INSERT INTO unburnt
SELECT
*
FROM
codes T2
WHERE
NOT EXISTS (SELECT *
FROM
burnt T1
WHERE
T1.code = T2.code)
应将任何不匹配的行放入unburnt
表中。
处理此查询的最佳方法是什么?
3 个表的数据库表结构相同。
代码
身份证 代码(文本)烧毁
身份证 代码(文本)未燃烧
身份证 代码(文本)【问题讨论】:
能否发一下相关的表结构(create table code
)?
@SubrataDeyPappu 我已经编辑了问题以包含表格结构
左连接代码烧毁union
左连接烧毁代码,因为mysql不支持完全外连接。
你有什么索引?
试试这个方法:INSERT INTO unburnt select a.id, a.text from codes a LEFT JOIN burnt b on a.id = b.id WHERE b.id IS NULL
【参考方案1】:
尝试将 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.
【讨论】:
你提出了一个很好的观点。我在想我可以使用 php 逐行插入,每次不匹配时插入。我很想看看是否有办法用 sql 处理这种事情以上是关于用sql查找表之间不匹配的行的主要内容,如果未能解决你的问题,请参考以下文章