Использование CTE для удаления истинных дубликатов в Greenplum - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь удалить истинные дубликаты, используя CTE, но получаю следующее сообщение об ошибке.

ERROR:  syntax error at or near "DELETE"
LINE 60: DELETE FROM CTE where row_num=2;
         ^
********** Error **********

ERROR: syntax error at or near "DELETE"
SQL state: 42601
Character: 1125

Мой код -

WITH CTE AS (select  ROW_NUMBER() OVER( PARTITION BY column1,
column2,
column3
ORDER BY column2 DESC, column3 asc ) AS row_num,
column1,
column2,
column3
column4
load_feed_num
from MT_TABLE_NAME
where column2='some value here')
DELETE FROM CTE where row_num=2;

Если я заменю DELETE FROM CTE where row_num=2; на SELECT * FROM CTE where row_num=2;.

Я получаю результат немедленно. Я что-то упустил?

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Используйте Row_Number, чтобы получить записи, которые вы хотите сохранить (= 1) И удалите из базовой таблицы все остальное. Или используйте CTE для присоединения к базовой таблице с помощью первичного ключа.

0 голосов
/ 27 марта 2019

Это запрос выбора, а не таблица, из которой вы удаляете. Что вы можете сделать, так это то, что у вас может быть имя таблицы, как показано ниже, а также несколько общих столбцов с той же таблицей, совпадающей с CTE

Delete from table where.... CTE...etc code

...