0
我在DB,A和B中有兩個表。每個表由只有一列,電子郵件。所以我想檢查表B中的每個電子郵件與表A,如果它存在,刪除它;如果它不存在,請添加它。使用PHP,比較兩個單列MYSQL表,添加表B中不存在的記錄,並刪除記錄
我該怎麼做?
我在DB,A和B中有兩個表。每個表由只有一列,電子郵件。所以我想檢查表B中的每個電子郵件與表A,如果它存在,刪除它;如果它不存在,請添加它。使用PHP,比較兩個單列MYSQL表,添加表B中不存在的記錄,並刪除記錄
我該怎麼做?
理想情況下,你應該在純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);
這將執行以下操作:
由於表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)
太好了,非常感謝 – user163831
你想從**兩個**表中刪除記錄匹配,或只有一個? – msg45f
兩者。一個更簡單/更有效的方法是在一次運行中簡單地刪除重複項(兩者),然後將表B中剩餘的電子郵件地址插入到表A中......那麼,我該怎麼做? – user163831
你想刪除重複,然後重複?什麼? – Kisaragi