0

我有一个问题,因为我之前的工作搞砸了。我有名为“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 中编写一些方法,然后从我的控制台调用它。如何解决这个问题?

所描述的场景可能有多种情况。

感谢您的时间和考虑。

4

2 回答 2

0

创建另一个具有所需约束的表primary key (id),然后

insert into yyy (select * from xxx);

并忽略错误。这将允许您保留原始数据的副本,以防您需要再次访问它。

于 2013-03-09T21:59:48.433 回答
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 集中的记录。然后它会删除所有重复项。

于 2013-03-09T21:51:44.063 回答