我有以下查询,其中ID不是唯一的:
delete
( SELECT ROW_NUMBER() OVER (PARTITION BY createdOn, id order by updatedOn) as rn , id FROM `a.tab` ) as t
WHERE t.rn> 1;
内部选择返回结果,但删除失败并显示:
错误:语法错误:在[2:7]出现意外的“(”
这里的语法问题是什么?
答案 0 :(得分:2)
与SQL Server和其他一些数据库不同,Big Query不允许直接从CTE中删除。但是,我们可以指定目标表,然后使用WHERE
子句中的行号。
DELETE
FROM yourTable AS t1
WHERE (SELECT ROW_NUMBER() OVER (PARTITION BY createdOn, id ORDER BY updatedOn)
FROM yourTable AS t2
WHERE t1.id = t2.id) > 1;
这里的想法是使用id
(可能是主键)将行号值与delete语句中的每一行相关。
答案 1 :(得分:0)
将查询用作::
从t删除
从(SELECT ROW_NUMBER()OVER(PARTITION BY createdOn,id order byupdatedOn)设为rn,id FROM a.tab
)设为t
t.rn> 1;
希望这行得通