提问者:小点点

如何使用CTE删除和更新?


文件中说

在以下上下文中允许使用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不可更新

当我尝试这样做时,也会发生同样的事情:

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个答案

匿名用户

你不能。 您的示例非常琐碎,因此不需要CTE--只需在表上运行条件即可。

但是,通常,您可以使用CTE返回行和主键。 使用主键上的join标识要更新或删除的行。 当然,任何列都足够了,但是主键通常是最好的。