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

これは、次の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、つまりレコードとその複製でグループ化します。次に、グループごとに、保持したいIDが最も小さいレコードが提供されます。

DELETE FROM xxx WHERE id NOT IN ()

selectによって提供されたIDのセットに含まれていないIDを持つすべてのレコードを削除します。次に、すべての重複を削除します。

于 2013-03-09T21:51:44.063 に答える
0

必要な制約を使用して別のテーブルを作成しprimary key (id)、次に

insert into yyy (select * from xxx);

エラーを無視します。これにより、再度アクセスする必要が生じた場合に備えて、元のデータのコピーを保持できます。

于 2013-03-09T21:59:48.433 に答える