我有一個Rails 5應用程序。我有一個表充斥着從各種來源拉到URL數據:Rails 5 ActiveRecord Delete Duplicates
id url
1 http://google.com
2 http://yahoo.com
3 http://msn.com
4 http://google.com
5 http://yahoo.com
6 http://askjeeves.com
如何從該表中刪除重複?
我有一個Rails 5應用程序。我有一個表充斥着從各種來源拉到URL數據:Rails 5 ActiveRecord Delete Duplicates
id url
1 http://google.com
2 http://yahoo.com
3 http://msn.com
4 http://google.com
5 http://yahoo.com
6 http://askjeeves.com
如何從該表中刪除重複?
您可以通過URL組,留下一個並刪除重複:
Model.all.group_by(:url).values.each do |dup|
dup.pop #leave one
dup.each(&:destroy) #destroy other
end
//查找每個分組項目的所有重複的記錄,並將它們組通過現場
dups = MyModel.group(:url).having('count("url") > 1').count(:name)
//迭代破壞重複數據庫
dups.each do |key, value|
# Keep one and return rest of the duplicate records
duplicates = MyModel.where(url: key)[1..value-1]
puts "#{key} = #{duplicates.count}"
duplicates.each(&:destroy)
end
無解決方案的SQL解決方案:
Model.where.not(id: Model.group(:url).select("min(id)")).destroy_all
OR
Model.where.not(id: Model.group(:url).select("min(id)")).delete_all
這將刪除所有副本保存記錄有重複的記錄最低ID。