为什么cte return 报错说它不存在?
Why does the cte return the error that it does not exist?
这是我的代码
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;
当我运行笔记本
中的代码时,returns我出现了以下错误
ERROR: syntax error at or near "DELETE"
但我似乎找不到查询中的任何错误
当我尝试在在线编译器中执行它时 returns relation "cte" does not exist
的错误
也许这个错误可能是相关的?...
这是我想用 cte 做的事情:
我的第一个 table:
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
为第一个 John
的每个 Block_id
创建一个 returns 的 CTE。
然后加入 table 到 CTE:
WITH cte AS (
SELECT Block_id, MIN(step) step
FROM tablename
WHERE name = 'John'
GROUP BY Block_id
)
DELETE FROM tablename t
USING cte c
WHERE c.Block_id = t.Block_id AND c.step <= t.step
参见demo。
这是我的代码
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;
当我运行笔记本
中的代码时,returns我出现了以下错误ERROR: syntax error at or near "DELETE"
但我似乎找不到查询中的任何错误
当我尝试在在线编译器中执行它时 returns relation "cte" does not exist
的错误
也许这个错误可能是相关的?...
这是我想用 cte 做的事情: 我的第一个 table:
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
为第一个 John
的每个 Block_id
创建一个 returns 的 CTE。
然后加入 table 到 CTE:
WITH cte AS (
SELECT Block_id, MIN(step) step
FROM tablename
WHERE name = 'John'
GROUP BY Block_id
)
DELETE FROM tablename t
USING cte c
WHERE c.Block_id = t.Block_id AND c.step <= t.step
参见demo。