【发布时间】:2021-06-14 21:18:58
【问题描述】:
这是我的代码
WITH CTE AS(
SELECT COUNT(CASE name WHEN 'John' THEN 1 END) OVER (PARTITION BY BlockID ORDER BY Step) AS Johns
FROM dbo.YourTable)
DELETE FROM CTE
WHERE Johns >= 1;
SELECT *
FROM dbo.YourTable;
当我在笔记本中运行代码时,它返回以下错误
ERROR: syntax error at or near "DELETE"
但我似乎在查询中找不到任何错误
当我尝试在在线编译器中执行此操作时,它返回 relation "cte" does not exist 的错误
也许这个错误可能是相关的?...
这就是我想用 cte 做的事情: 我的第一张桌子:
Block_id step name
1 1 Marie
1 2 Bob
1 3 John
1 4 Lola
2 1 Alex
2 2 John
2 3 Kate
2 4 Herald
3 1 Alec
3 2 Paul
3 3 Rex
如您所见,数据框按 block_id 排序,然后按步排序。我只想在一个 block_id 中删除我命名为 John 的行之后的所有内容(还有 John 的行)。所以想要的输出是
Block_id step name
1 1 Marie
1 2 Bob
2 1 Alex
3 1 Alec
3 2 Paul
3 3 Rex
【问题讨论】:
-
尝试在创建 CTE 之前添加分号 stackoverflow.com/questions/6938060/…
-
您标记了 Postgres,但
dbo是典型的 SQL Server 架构名称。您确定 Postgres 是您使用的 DBMS? -
Postgresql 不支持可更新的 CTE。
-
@stickybit 是的,我确定
-
@forpas 你知道如何重写代码吗?
标签: sql postgresql common-table-expression sql-delete