我有一个问题,因为我早些时候在工作中搞砸了。我的模型名为“xxx”,我有以下字段
:identity, :lat, :lon, :name, :tag, :some_id
我想删除所有具有相同
的行:identity
所以,例如,如果我有
{identity = "2348", name = "Mr. Jackson"}
{identity = "2348", name = "Mr. Jackson"}
我想只有
{identity = "2348", name = "Mr. Jackson"}
(我应该在传输大量数据之前放置验证器)。但是如何实现这一目标?
我正在考虑在Model中编写一些方法然后从我的控制台调用它。如何解决这个问题?
可能存在所描述方案的多个案例。
感谢您的时间和考虑。
答案 0 :(得分:0)
您可以使用以下SQL查询解决此问题(适用于sqlite和postgresql):
DELETE FROM xxx WHERE id NOT IN (SELECT min(id) FROM xxx GROUP BY identity);
在执行此操作之前,请不要忘记复制数据库,因此如果出现任何问题,您可以再试一次。
对该查询究竟做了什么的一点解释:
SELECT min(id) FROM xxx GROUP BY identity
首先,它按身份对记录进行分组,即记录及其副本。然后,对于每个组,它会为您提供ID最低的记录,即您要保留的记录。
DELETE FROM xxx WHERE id NOT IN ()
删除id不包含在select提供的id集中的所有记录。然后删除所有重复项。
答案 1 :(得分:0)
创建另一个表格,其中包含所需的约束primary key (id)
,然后
insert into yyy (select * from xxx);
并忽略错误。这样您就可以保留原始数据的副本,以备您再次访问时使用。