BigQuery删除查询的正确语法是什么

时间:2018-09-16 15:21:44

标签: sql google-bigquery

我有以下查询,其中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]出现意外的“(”

这里的语法问题是什么?

2 个答案:

答案 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;

希望这行得通