Попробуйте создать следующее Query
в интерфейсе DAO
:
@Dao
public interface MyDaoTest {
...
@Query("DELETE FROM test
WHERE id NOT IN (SELECT MIN(id) FROM test GROUP BY name, lastName)")
void deleteDuplicates();
...
}
Этот запрос удалит все строки, в которых дублируются name
и lastName
.
Например, если у нас есть следующая таблица, мы можем видеть, что строки с идентификаторами 1
, 2
и 6
являются дубликатами, то же самое с строками с идентификаторами 3
и 4
,тогда как строка с 5
не имеет дубликатов.

Этот запрос группирует строки по name
и lastName
, оставляя толькоодин с минимальным идентификатором.Делая это, мы гарантируем, что мы получим только одну строку на каждый набор повторяющихся строк (с минимальным идентификатором)
SELECT MIN(id)
FROM test
GROUP BY name, lastName;

Наконец, если мы удалим все строки, идентификаторы которых не содержатся в результате этого внутреннего запроса, мы избавимся от дубликатов.
DELETE
FROM test
WHERE id NOT IN
(SELECT MIN(id)
FROM test
GROUP BY name, lastName);
