文件上说
在下列情况下允许使用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。delete的目标表cte\u 1不可更新
当我试着这样做的时候也会发生同样的事情:
WITH cte_1 (letters, numbers) AS
(SELECT * FROM test1)
UPDATE cte_1 SET numbers=14 WHERE numbers=-15;
那么,如何在mysql中从cte中进行更新和删除呢?我正在使用workbench 8.0 btw。提前谢谢。
1条答案
按热度按时间k3fezbri1#
你不能。您的示例非常简单,不需要cte—只需在表上运行条件。
不过,一般来说,您可以使用cte返回行和主键。使用
JOIN
在主键上标识要更新或删除的行。当然,任何列都可以,但是主键通常是最好的。