ruby-on-rails – 添加已经不是唯一数据的唯一双列索引
我有一个rails应用程序,需要添加一个唯一约束,以便:记录永远不会有相同的(:user,:hour)组合.
我想最好的方法是添加一个唯一的索引: add_index :records,[:user_id,:hour],:unique => true 问题是,我写的迁移失败了,因为我的数据库已经有了非唯一的组合.我如何找到这些组合? This answer建议“检查GROUP BY和COUNT”,但我是一个新手,我希望得到一些帮助解释. 我是否写了一个辅助方法来做到这一点?在我的应用程序中会去哪里? 谢谢! 解决方法
>在数据库控制台中运行此查询:SELECT *,COUNT(*)as n FROM table_name group by column_name HAVING n> 1
>修复重复的行 >重新运行迁移 恕我直言,您应手动编辑重复数据,以确保数据已正确修复. 更新: OP没有提及他/她正在使用Postgres而我提供了MySQL的解决方案. 对于Postgres: 基于此解决方案:Find duplicate rows with PostgreSQL 运行此查询: SELECT * FROM ( SELECT id,ROW_NUMBER() OVER(PARTITION BY merchant_Id,url ORDER BY id asc) AS Row FROM Photos ) dups WHERE dups.Row > 1 更多解释: 为了执行迁移并向列添加唯一约束,您需要先修复当前数据.通常,没有自动步骤,以确保您不会得到不正确的数据. 这就是为什么你需要手动找到重复的行并修复它.给定的查询将显示哪些行是重复的.因此,从那里,修复数据,您应该能够运行迁移. Mooore更新: 重复的行不会被标记.举个例子,如果你得到这样的结果: ID ROW 235 2 236 3 2 2 3 3 您应该选择id = 235的行,然后选择具有与id = 235相同的列值的每一行.从那里,你会看到每个ID都是id = 235的重复.然后,只需逐个编辑它们. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |