mysql - Rails mysql 删除重复的元组

标签 mysql sql ruby-on-rails duplicates

所以我正在开发这个应用程序,我们有供应商,每个供应商都有很多分数,每个分数都有详细信息。有两种输入供应商分数的方法,一种是通过表格,另一种是上传 excel。现在我们有一些人通过电子表格上传,这将更新单个供应商,然后上传整个列表,这为她的所有供应商创建了副本。

这条sql语句是我写的。注意:让分数独一无二的是 1. 它的 ID 和 2. valid_from 和 valid_until 日期的组合。

def remove_old_duplicates
  remove_dup = "DELETE s1 FROM `sms_development`.`scores` s1, `sms_development`.`scores` s2 WHERE s1.supplier_id = s2.supplier_id AND s1.valid_from = s2.valid_from AND s1.valid_until = s2.valid_until AND s1.id < s2.id;"

  ActiveRecord::Base.connection.execute remove_dup
end

基本上,这应该做的是获取表格并将其与自身结合,然后查找供应商相同且 valid_from 和 valid_until 属性相同的所有分数。然后它寻找具有最大 ID 号的那个并删除其余的。唯一的问题是它没有删除它们。我在工作台上运行查询,它说它工作正常,只是不在应用程序中。我在导入新数据后立即运行此查询?关于可能导致此问题的任何想法?

注意:我将它基于 ID 号而不是 created_at 属性的原因是,如果我在字段中创建分数,rails 会给我 created_at 属性,excel 上传使用 sql 插入,因此不会获得该属性, 由于 ID 是唯一的,我认为 ID 越大,记录越新

最佳答案

试试这个:

remove_dup = "DELETE s1 FROM `sms_development`.`scores` s1 JOIN
   `sms_development`.`scores` s2 ON s1.supplier_id = s2.supplier_id AND s1.valid_from = 
    s2.valid_from AND s1.valid_until = s2.valid_until AND s1.id < s2.id;"

DEMO

关于mysql - Rails mysql 删除重复的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15933286/

相关文章:

mysql - 如何使用 PHP 计算给定年份的 "The second Monday in May"等规则指定的日期?

mysql - SQL 连接查询选择行并检查它们是否存在于另一个表中

sql - 我认为正确的外部连接可以解决这个问题,但是

ruby-on-rails - 使用 prawn 时显示未初始化的常量 Prawn::FLOAT_PRECISION 错误

mysql - 如何使用 ActiveRecord 和 Ruby 从预先加载的表数组中删除数据库记录

php - INSERT INTO 不将数据发送到数据库

mysql - mysql 中的 vb.net 组合框值

ruby-on-rails - Ruby On Rails 3.2.13 - 对 Rails 应用程序使用不同的 Gemset

php - 连接到 MySQL 数据库的安全方法

php - 是否可以编写一个输出 JSON 的 SQL 函数?