sql - 如何使用CTE在SQLite中删除重复的列-错误

标签 sql sqlite sql-delete

我有一个数据库,该数据库具有名为“ Link”的表,该表具有“ Ex_ID”和“ Cat_ID”,其中具有重复的行。我查看了如何删除这些重复项,并想到了以下代码:

WITH LinkCTE AS
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY Ex_ID, Cat_ID 
    ORDER BY Ex_ID, Cat_ID) as RowNumber
    FROM Link
)
DELETE FROM LinkCTE WHERE RowNumber > 1


但这给了我这个错误:

-- At line 1:
WITH LinkCTE AS
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY Ex_ID, Cat_ID 
    ORDER BY Ex_ID, Cat_ID) as RowNumber
    FROM Link
)
DELETE FROM LinkCTE WHERE RowNumber > 1
-- Result: no such table: LinkCTE


然后,我添加了“ SELECT * FROM LinkCTE;”。在删除之前,表看起来还不错,但是在以下情况下仍然给我一个错误:

-- At line 7:
DELETE FROM LinkCTE WHERE RowNumber > 1
-- Result: no such table: LinkCTE


我不知道为什么找不到“ LinkCTE”

最佳答案

您不能直接从SQLite中的CTE中删除。
如果要删除每个Ex_IDCat_ID的重复行并仅保留1行,则可以使用列ROWID进行:

DELETE FROM Link 
WHERE ROWID NOT IN (
  SELECT MIN(ROWID) 
  FROM Link 
  GROUP BY Ex_ID, Cat_ID
);

关于sql - 如何使用CTE在SQLite中删除重复的列-错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59255208/

相关文章:

sql - 将行折叠成一列

mysql - 在一个查询中选择多对多表

ios - CoreData 不删除对象一对多实体

android - 自动删除 ORMLite 中的嵌套对象

php - 如何使用复选框删除数据库结果行

mysql - SQL SUMPRODUCT 有一个扭曲

php - PHP的MySQLi多查询重新排序自动增量ID

带有 NUL 的 SQLite 字符串

sql-server - TRUNCATE 与 DELETE FROM 的优缺点

sql - 删除在另一个表中没有匹配项的记录