2014-04-21 54 views
0

我在DB,A和B中有兩個表。每個表由只有一列,電子郵件。所以我想檢查表B中的每個電子郵件與表A,如果它存在,刪除它;如果它不存在,請添加它。使用PHP,比較兩個單列MYSQL表,添加表B中不存在的記錄,並刪除記錄

我該怎麼做?

+0

你想從**兩個**表中刪除記錄匹配,或只有一個? – msg45f

+0

兩者。一個更簡單/更有效的方法是在一次運行中簡單地刪除重複項(兩者),然後將表B中剩餘的電子郵件地址插入到表A中......那麼,我該怎麼做? – user163831

+0

你想刪除重複,然後重複?什麼? – Kisaragi

回答

1

理想情況下,你應該在純SQL中真正做到這一點,而不必使用php。

假設您的表A的列爲a integer,而表B的列爲b integer。然後,你可以做這樣的事情:

create temporary table X as select a from A join B on A.a=B.b; 
delete from B where b in (select a from X); 
delete from A where a in (select a from X); 
insert into A (a) (select b from B); 

這將執行以下操作:

  1. 創建一個臨時表,並插入到它同時存在於一個
  2. 的B刪除所有的所有記錄和B存在兩個表
  3. 從兩個表中
  4. 插入存成剩餘B中
  5. 一個一切都記錄在刪除記錄10

由於表X被創建爲臨時數據庫,因此在數據庫連接關閉時它會自動刪除。現在

,如果你需要從PHP調用此方法,你可以做到以下幾點:

$db = new PDO($CONNECT_STRING, USERNAME, PASSWORD); 
$db->exec("create temporary table X as select a from A join B on A.a=B.b"); 
$db->exec("delete from B where b in (select a from X)"); 
$db->exec("delete from A where a in (select a from X)"); 
$db->exec("insert into A (select b from B)"); 
$db = null; 

編輯:

如果你需要從B處的記錄是不以存在,那麼你可以這樣做一個簡單的SQL:

select b from B where b not in (select a from A) 
+0

太好了,非常感謝 – user163831

相關問題