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

Sql 使用BigQuery删除查询的正确语法是什么,sql,google-bigquery,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]处出现意外错误 这里的语法问题是什么?与SQL Server和其他一些数据库不同,大查询不允许直接从CTE中删除。但是

我有一个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]处出现意外错误


这里的语法问题是什么?

与SQL Server和其他一些数据库不同,大查询不允许直接从CTE中删除。但是,我们可以指定目标表,然后在WHERE子句中使用行号


这里的想法是使用id将行号值与delete语句中的每一行关联起来,id可能是主键。

与SQL Server和其他一些数据库不同,大查询不允许直接从CTE中删除。但是,我们可以指定目标表,然后在WHERE子句中使用行号

这里的想法是使用id将行号值与delete语句中的每一行关联起来,id可能是主键。

使用query as:: 从t中删除 从中选择createdOn分区上的行数,id order BY UpdateOn作为rn,id从a.tab作为t 其中t.rn>1

希望这能起作用

将查询用作: 从t中删除 从中选择createdOn分区上的行数,id order BY UpdateOn作为rn,id从a.tab作为t 其中t.rn>1


希望这能起作用

您要从哪个表中删除?这是@dustytrash a.tab,我正在查询同一id的多个外观,我想通过UpdateOn删除最旧的记录。@UweKeim我知道这些文档。文档中没有我的问题的答案。请将需要的行复制到新表中。这通常是BigQuery中最有效的方法。您要从哪个表中删除?这是@dustytrash a.tab。我正在查询同一id的多个外观,我想通过UpdateOn删除最早的记录。@UweKeim我知道这些文档。文档中没有我的问题的答案。请将需要的行复制到新表中。这通常是BigQuery中最有效的方法。错误:引用其他表的相关子查询不受支持,除非它们可以取消相关,例如通过将它们转换为有效联接。我尝试执行的逻辑是:请尝试我的查询,如果失败,则提供反馈。它失败了。。我写了一个错误:错误:引用其他表的相关子查询不受支持,除非它们可以被取消相关,例如通过将它们转换为有效的联接。您使用的是标准的还是传统的?另外,您是运行了我的精确查询,还是复制了它然后更改了内容?当我的答案不存在时,错误消息暗示不止一个表。错误:不支持引用其他表的相关子查询,除非它们可以取消相关,例如通过将它们转换为有效联接。我尝试执行的逻辑如下:请尝试我的查询,如果失败,则提供反馈。失败。。我写了一个错误:错误:引用其他表的相关子查询不受支持,除非它们可以被取消相关,例如通过将它们转换为有效的联接。您使用的是标准的还是传统的?另外,您是运行了我的精确查询,还是复制了它然后更改了内容?当我的答案不正确时,错误消息暗示不止一个表。
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;