我已经创建了一个联系人表(姓名,电话,电子邮件),我有一些重复的记录,我想删除
WITH ContactsCTE AS (
SELECT *, row_number() OVER ( PARTITION BY Name ORDER BY Name) as RowNumber
FROM Contacts
)
SELECT * FROM ContactsCTE
当我使用SELECT时,它会显示它们的数据和rowNumber,我想它工作得很好
| 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行:
2条答案
按热度按时间ssm49v7z1#
SQLite不支持可更新的CTE。
可以使用
NOT EXISTS
:这将删除存在另一行的所有行,该行具有相同的名称和较小的
rowid
。参见demo。
或者使用相关子查询:
参见demo。
结果如下:
pbossiut2#
我也有同样的问题。
一种解决方法如下。
不使用“DELETE FROM ContactsCTE WHERE RowNumber > 1”,而是使用SELECT * FROM ContactsCTE WHERE RowNumber = 1;