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

How do I delete duplicate columns in SQLite using CTE - error

我有一个名为 'Link' 的 table 数据库,其中有 '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;' 并且 table 看起来不错,但它仍然给我一个错误:

-- 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
);