如何使用 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_ID
和 Cat_ID
的重复行并只保留 1 行,您可以使用列 ROWID
:
来完成
DELETE FROM Link
WHERE ROWID NOT IN (
SELECT MIN(ROWID)
FROM Link
GROUP BY Ex_ID, Cat_ID
);
我有一个名为 '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_ID
和 Cat_ID
的重复行并只保留 1 行,您可以使用列 ROWID
:
DELETE FROM Link
WHERE ROWID NOT IN (
SELECT MIN(ROWID)
FROM Link
GROUP BY Ex_ID, Cat_ID
);