检查行是否存在于不同的数据库中

时间:2014-01-30 16:43:22

标签: mysql ruby-on-rails

使用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中找不到,那么我会将其删除。还有更好的方法吗?

感谢。

2 个答案:

答案 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