use*_*045 5 activerecord ruby-on-rails
我有一个Rails 5应用程序.我有一个表格,里面填写了从各种来源提取的URL数据:
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
Run Code Online (Sandbox Code Playgroud)
如何从此表中删除重复项?
无循环的SQL解决方案:
Model.where.not(id: Model.group(:url).select("min(id)")).destroy_all
Run Code Online (Sandbox Code Playgroud)
要么
Model.where.not(id: Model.group(:url).select("min(id)")).delete_all
Run Code Online (Sandbox Code Playgroud)
要么
dup_ids = Model.group(:url).select("min(id)").collect{|m| m['min(id)']}
Model.where.not(id: dup_ids).delete_all
#Model.where.not(id: dup_ids).destroy_all
Run Code Online (Sandbox Code Playgroud)
这将删除所有重复项,保留具有重复记录的最小ID的记录.
您可以按 url 分组,保留一个并删除重复项:
Model.all.group(:url).values.each do |dup|
dup.pop #leave one
dup.each(&:destroy) #destroy other
end
Run Code Online (Sandbox Code Playgroud)
获取良好 ID 的数组,然后删除不在该列表中的所有记录。
good_ids = Model.group(:url).pluck("max(id)")
Model.where.not(id: good_ids).delete_all
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1927 次 |
| 最近记录: |