2013-05-09 57 views
0

如何比較兩個包含數百萬條記錄的MySQL數據庫表的兩列?我基本上比較TableA和TableB的電話號碼。 TableA中的數字將根據TableB中的數字進行檢查,如果找到,則會刪除重複的數字。由於返回的數字存儲在數組中,因此我使用了array_intersect($array1, $array2)。這將返回重複的數字,但問題是它消耗太多內存並需要永久執行。在PHP中比較兩列和數百萬條記錄

有沒有辦法做到這一點,而不佔用太多的內存?表A和表B中包含的數字各超過1000萬。

+2

在mysql方面比較。 – Aris 2013-05-09 19:50:46

回答

2

您可以使用此查詢,這將返回同時存在於表A和表B中的所有數字:

SELECT DISTINCT TableA.Number 
FROM TableA INNER JOIN TableB 
    ON TableA.Number = TableB.Number 
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 
+0

謝謝你們的答案。最重要的是,TableB記錄(數字)由REST API返回,並與本地數據庫中現有的TableA編號進行覈對。 – BenI 2013-05-09 21:16:07

+0

@BenjaminIgbokwe您正在收到一個REST響應,其中有數百萬條記錄? – 2013-05-09 22:14:04

+0

沒錯,JSON響應。所以我的問題是減少交叉存儲在數組中的db結果所花費的時間量。 – BenI 2013-05-09 22:41:24