Новая версия MySQL, 8.0, теперь поддерживает Общие табличные выражения .
Согласно инструкции:
AПредложение WITH допускается в начале операторов SELECT, UPDATE и DELETE:
WITH ... SELECT ...
WITH ... UPDATE ...
WITH ... DELETE ...
Итак, я подумал, учитывая следующую таблицу:
ID lastName firstName
----------------------
1 Smith Pat
2 Smith Pat
3 Smith Bob
Я могу использоватьследующий запрос:
;WITH ToDelete AS
(
SELECT ID,
ROW_NUMBER() OVER (PARTITION BY lastName, firstName ORDER BY ID) AS rn
FROM mytable
)
DELETE FROM ToDelete
, чтобы удалить дубликаты из таблицы, как я мог бы сделать в SQL Server .
ItОказывается, я был неправ.Когда я пытаюсь выполнить элемент DELETE
из MySQL Workbench, я получаю сообщение об ошибке:
Код ошибки: 1146. Таблица 'todelete' не существует
Iтакже появляется сообщение об ошибке, когда я пытаюсь выполнить UPDATE
с помощью CTE.
Итак, мой вопрос: как можно использовать предложение WITH
в контексте UPDATE
или * 1038?* заявление в MySQL (как указано в руководстве к версии 8.0)?