如何比较从包含数百万条记录的 MySQL 数据库表返回的两列?我基本上是在比较 TableA 和 TableB 中的电话号码。将表 A 中的数字与表 B 中的数字进行核对,如果发现重复的数字将被删除。我使用过array_intersect($array1, $array2)
,因为返回的数字存储在数组中。这会返回重复的数字,但问题是它消耗了太多内存并且需要永远执行。
有没有办法在不消耗太多内存的情况下做到这一点?表 A 和表 B 中包含的数字均超过 1000 万。
如何比较从包含数百万条记录的 MySQL 数据库表返回的两列?我基本上是在比较 TableA 和 TableB 中的电话号码。将表 A 中的数字与表 B 中的数字进行核对,如果发现重复的数字将被删除。我使用过array_intersect($array1, $array2)
,因为返回的数字存储在数组中。这会返回重复的数字,但问题是它消耗了太多内存并且需要永远执行。
有没有办法在不消耗太多内存的情况下做到这一点?表 A 和表 B 中包含的数字均超过 1000 万。
您可以使用此查询,它将返回 TableA 和 TableB 中存在的所有数字:
SELECT DISTINCT TableA.Number
FROM TableA INNER JOIN TableB
ON TableA.Number = TableB.Number
您不想将那么多数据读入内存。为什么不直接在 SQL 中完成这一切呢?
如果要查找表 A 中不存在于表 B 中的所有记录,只需执行以下操作:
SELECT a.field
FROM
table_a AS a
LEFT OUTER JOIN table_b AS b
ON a.field = b.field
WHERE b.field IS NULL
如果你想从 A 中删除所有在 B 中没有匹配的行,你也可以在 SQL 中轻松地执行此操作:
DELETE a
FROM
table_a AS a
LEFT OUTER JOIN table_b AS b
ON a.field = b.field
WHERE b.field IS NULL