语法错误:应为“(”或“,”或关键字 SELECT,但在 [6:1] 处获得关键字 DELETE
Posted
技术标签:
【中文标题】语法错误:应为“(”或“,”或关键字 SELECT,但在 [6:1] 处获得关键字 DELETE【英文标题】:Syntax error: Expected "(" or "," or keyword SELECT but got keyword DELETE at [6:1] 【发布时间】:2021-12-29 09:54:45 【问题描述】:--DELETE DUPLICATE VALUE IF HAVE TO
WITH cte AS
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY ride_id ORDER BY started_at) AS row_num
FROM `case-study-1-bike-share.bike_share.202102`
)
DELETE FROM cte
WHERE row_num > 1;
我想删除重复值,但收到以下错误。我该如何解决这个问题?
【问题讨论】:
您的 SQL 实现不允许从 CTE 中删除。你可以改用EXISTS()
。
但我想从表中删除行而不检查它
所以你想删除所有除了第一个(每个ride_id?)
你可以这样做:从case-study-1-bike-share.bike_share.202102
删除其中ride_id in ( WITH cte AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BYride_id ORDER BY started_at) AS row_num FROM case-study-1-bike-share.bike_share.202102
) 选择ride_id 来自 cte WHERE row_num > 1 )
是的,删除重复行,除了ride_id 列的第一个唯一值
【参考方案1】:
并非所有 SQL 实现都允许可修改的 CTE。但你不需要它们(在这种情况下)。
您可以使用 EXISTS(...)
检查相同的 ride_id
) 是否存在较早的观察结果。如果this
存在较旧的,则this
不能是最旧的,可以删除。
-- DELETE DUPLICATE VALUE IF HAVE TO
DELETE FROM "case-study-1-bike-share.bike_share.202102" d
WHERE EXISTS (
SELECT *
FROM "case-study-1-bike-share.bike_share.202102" x -- same table
WHERE x.ride_id = d.ride_id -- same ride
AND x.started_at < d.started_at -- but older date exists
)
;
【讨论】:
以上是关于语法错误:应为“(”或“,”或关键字 SELECT,但在 [6:1] 处获得关键字 DELETE的主要内容,如果未能解决你的问题,请参考以下文章
pg:select * from analyse 语法错误 在 "analyse" 或附近的 LINE 1: select * from analyse
获取 Rails 错误“语法错误,意外 tSYMBEG,需要关键字_do 或 '' 或 '('”
SQLSTATE [42000]:语法错误或访问冲突:sql select 语句中的 1064
获取 PSQLException:错误:在带有 Postgres 的 spark jdbc 中使用查询而不是表名时在“SELECT”处或附近出现语法错误