Java SQLite-没有这样的表:使用CTE删除重复记录时
我已经创建了一个联系人表(姓名、电话、电子邮件),我有一些重复的记录要删除Java SQLite-没有这样的表:使用CTE删除重复记录时,java,database,sqlite,Java,Database,Sqlite,我已经创建了一个联系人表(姓名、电话、电子邮件),我有一些重复的记录要删除 WITH ContactsCTE AS ( SELECT *, row_number() OVER ( PARTITION BY Name ORDER BY Name) as RowNumber FROM Contacts ) SELECT * FROM ContactsCTE 当我使用SELECT时,它会显示它们的数据和行数,我想它可以正常工作 | Name | Phone | Email
WITH ContactsCTE AS (
SELECT *, row_number() OVER ( PARTITION BY Name ORDER BY Name) as RowNumber
FROM Contacts
)
SELECT * FROM ContactsCTE
当我使用SELECT时,它会显示它们的数据和行数,我想它可以正常工作
| Name | Phone | Email | RowNumber |
| Kris | 0123 | kris@gmail.com | 1 |
| Kris | 0123 | kris@gmail.com | 2 |
| Kris | 0123 | kris@gmail.com | 3 |
| Annie| 065 | annie@gmail.com| 1 |
| Bob | 0123 | bob@gmail.com | 1 |
| Bob | 0123 | bob@gmail.com | 2 |
但是如果我想删除它们
WITH ContactsCTE AS (
SELECT *, row_number() OVER ( PARTITION BY Name ORDER BY Name) as RowNumber
FROM Contacts
)
DELETE FROM ContactsCTE WHERE RowNumber > 1
我得到这个信息:
“结果:没有这样的表格:ContactsCTE”
在第1行:SQLite不支持可更新的CTE。
您可以使用
不存在
:
DELETE FROM Contacts
WHERE EXISTS (
SELECT 1 FROM Contacts c
WHERE c.Name = Contacts.Name AND c.rowid < Contacts.rowid
);
请参阅。结果:
DELETE FROM Contacts
WHERE rowid > (
SELECT MIN(rowid) FROM Contacts c
WHERE c.Name = Contacts.Name
);
| Name | Phone | Email |
| ----- | ----- | --------------- |
| Kris | 123 | kris@gmail.com |
| Annie | 65 | annie@gmail.com |
| Bob | 123 | bob@gmail.com |