Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on May 9th, 2012  |  syntax: None  |  size: 0.83 KB  |  hits: 18  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. How can I programmatically find these duplicate records?
  2. ResponseSets.all.each do |set|
  3.   answer_ids = []
  4.   set.responses.each do |r|
  5.     puts "Response #{r.id}: set=#{set.id}, answer=#{r.answer_id}"
  6.     if answer_ids.include? r.answer_id
  7.       puts "Duplicate found!"
  8.       # r.destroy  # Uncomment when you feel it is safe
  9.     else
  10.       answer_ids << r.answer_id
  11.     end
  12.   end
  13. end
  14.        
  15. select rs.id, r.answer_id, count(r.id)
  16. from response_sets rs
  17. join responses r on r.response_set_id = rs.id
  18. group by rs.id, r.answer_id
  19. having count(r.id) > 1;
  20.        
  21. select r.id
  22. from responses r
  23. join (
  24.   select rs.id as rs_id, r.answer_id as a_id, r.id as r_id
  25.   from response_sets rs
  26.   join responses r on r.response_set_id = rs.id
  27.   group by rs.id, r.answer_id
  28.   having count(r.id) > 1
  29. ) on r.response_set_id = rs_id
  30. where r.answer_id = a_id and r.id != r_id;