如何比较从每个包含数百万条记录的MySQL数据库表返回的两列?我基本上是比较TableA和TableB的电话号码。表A中的数字与表B中的数字进行核对,如果找到则删除重复的数字。我使用array_intersect($array1, $array2)
,因为返回的数字存储在数组中。这会返回重复的数字,但问题是它占用了太多内存并且需要永远执行。
有没有办法在不浪费大量内存的情况下这样做? TableA和TableB中包含的数字各超过1000万。
答案 0 :(得分:2)
您可以使用此查询,它将返回TableA和TableB中存在的所有数字:
SELECT DISTINCT TableA.Number
FROM TableA INNER JOIN TableB
ON TableA.Number = TableB.Number
答案 1 :(得分: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