我有一个数据库,该数据库具有名为“ 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_ID
和Cat_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/