使用Rails 3.2。我想创建一个rake任务来检查两个不同的数据库是否存在相同的行:
数据库abc
,表格shops
,列partner_id
:
1
2
3
4
5
数据库xyz
,表格shops
,列id
:
1
2
4
5
6
我想将abc.shops.partner_id
与xyz.shops.id
进行比较。在这种情况下,id 3
不存在,我将删除它。
目前,我只是逐个检查abc.shops.partner_id
,如果在xyz
中找不到,那么我会将其删除。还有更好的方法吗?
感谢。
答案 0 :(得分:1)
使用单个选择查询从xyz获取所有商店ID,如果id不在xyz的id列表中,则删除abs中的商店。
这样您只会触发两个数据库查询。
像
这样的东西 xyz_shop_ids = xyz.shops.pluck(:id)
abc.shops.where("id NOT IN (?)", xyz_shops_ids).delete_all
答案 1 :(得分:1)
由于它们位于同一台服务器上,您可以加入表格:
DELETE FROM abc.shops AS a
LEFT JOIN xyz.shops AS x ON a.partner_id = x.id
WHERE x.id IS NULL