文件中说
在以下上下文中允许使用WITH子句:
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不可更新
当我尝试这样做时,也会发生同样的事情:
WITH cte_1 (letters, numbers) AS
(SELECT * FROM test1)
UPDATE cte_1 SET numbers=14 WHERE numbers=-15;
那么,如何在MySQL中更新和删除CTE呢? 我使用的是Workbench 8.0 BTW。 提前谢谢你。
你不能。 您的示例非常琐碎,因此不需要CTE--只需在表上运行条件即可。
但是,通常,您可以使用CTE返回行和主键。 使用主键上的join
标识要更新或删除的行。 当然,任何列都足够了,但是主键通常是最好的。