0

如何比较从包含数百万条记录的 MySQL 数据库表返回的两列?我基本上是在比较 TableA 和 TableB 中的电话号码。将表 A 中的数字与表 B 中的数字进行核对,如果发现重复的数字将被删除。我使用过array_intersect($array1, $array2),因为返回的数字存储在数组中。这会返回重复的数字,但问题是它消耗了太多内存并且需要永远执行。

有没有办法在不消耗太多内存的情况下做到这一点?表 A 和表 B 中包含的数字均超过 1000 万。

4

2 回答 2

2

您可以使用此查询,它将返回 TableA 和 TableB 中存在的所有数字:

SELECT DISTINCT TableA.Number
FROM TableA INNER JOIN TableB
     ON TableA.Number = TableB.Number
于 2013-05-09T19:53:21.943 回答
1

您不想将那么多数据读入内存。为什么不直接在 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 
于 2013-05-09T19:57:18.800 回答