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

10-14 17:42
查看更多