Как использовать DELETE и UPDATE с CTE? - PullRequest
1 голос
/ 09 июля 2020

В документации говорится, что

Предложение WITH разрешено в этих контекстах:

  • В начале операторов SELECT, UPDATE и DELETE .
    WITH ... SELECT ...
    
    WITH ... UPDATE ...
    
    WITH ... DELETE ...

Итак, как мне это сделать? Я пробовал что-то вроде этого:

CREATE TABLE test1(
    val_1 VARCHAR(20),
    val_2 INT
);

INSERT INTO test1 VALUES('abc', 12), ('efg', 13), ('hij', -15);

WITH cte_1 (letters, numbers) AS
    (SELECT val_1, val_2 FROM test1)
DELETE FROM cte_1 WHERE numbers=-15;

Это вызывает ошибку: Код ошибки: 1288. Целевая таблица cte_1 DELETE не обновляется

То же самое происходит, когда я попробуйте следующее:

WITH cte_1 (letters, numbers) AS
    (SELECT * FROM test1)
UPDATE cte_1 SET numbers=14 WHERE numbers=-15;

Итак, как мне на самом деле ОБНОВЛЯТЬ и УДАЛЯТЬ ИЗ CTE в MySQL? Кстати, я использую Workbench 8.0. Заранее спасибо.

1 Ответ

2 голосов
/ 09 июля 2020

Вы не можете. Ваши примеры настолько тривиальны, что CTE не требуется - просто запустите условие в таблице.

В общем, вы можете использовать CTE для возврата строк вместе с первичным ключом . Использование JOIN в первичном ключе для идентификации строк для обновления или удаления. Конечно, достаточно любых столбцов, но обычно лучше всего использовать первичный ключ.

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