2014-01-30 36 views
0

使用Rails 3.2。我想創建一個rake任務檢查兩個不同的數據庫中,如果同一行存在:檢查行是否存在於不同的數據庫中

數據庫abc,表shops,列partner_id

1 
2 
3 
4 
5 

數據庫xyz,表shops,列id

1 
2 
4 
5 
6 

我想要以比較abc.shops.partner_idxyz.shops.id。在這種情況下,ID 3不存在,我想將其刪除。

目前,我只是逐個檢查abc.shops.partner_id,如果沒有在xyz中找到,那麼我會刪除它。有沒有更好的辦法?

謝謝。

+1

這個怎麼樣:從數據庫'xyz.shops'得到所有的IDS和把它放在'list'中,然後刪除'abc.shops'中的所有行,在給定的'list'中哪些行沒有partner_id? 2個查詢。 – lucke84

+0

這些數據庫位於同一臺服務器還是不同的服務器上?如果他們在同一臺服務器上,則可以加入他們。 – Barmar

+1

@ lucke84好主意!我會考慮! – Victor

回答

1

因爲他們是在同一臺服務器上,您可以加入表:

DELETE FROM abc.shops AS a 
LEFT JOIN xyz.shops AS x ON a.partner_id = x.id 
WHERE x.id IS NULL 
1

使用單個select查詢從xyz獲取所有商店ID,並在abs中刪除商店,如果有不在xyz的id列表中的id。

這樣你只能發射兩個數據庫查詢。

喜歡的東西

xyz_shop_ids = xyz.shops.pluck(:id) 

abc.shops.where("id NOT IN (?)", xyz_shops_ids).delete_all 
+0

任何提高性能的方法?因爲mysql2在500,000行上執行此操作時給我'MySQL服務器已經消失了'。 – Victor

相關問題