Какой правильный синтаксис для запроса на удаление с BigQuery - PullRequest
0 голосов
/ 16 сентября 2018

У меня есть следующий запрос, где идентификатор не уникален:

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 голосов
/ 16 сентября 2018

Используйте запрос как :: delete from t From (ВЫБЕРИТЕ ROW_NUMBER () OVER (PARTITION BY созданный, порядок идентификаторов updatedOn) как rn, идентификатор ОТ a.tab) как t ГДЕ t.rn> 1;

Надеюсь, что это работает

0 голосов
/ 16 сентября 2018

В отличие от 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, который предположительно является первичным ключом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...