如何在ctes中使用delete和update?

bvuwiixz  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(339)

文件上说
在下列情况下允许使用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。提前谢谢。

k3fezbri

k3fezbri1#

你不能。您的示例非常简单,不需要cte—只需在表上运行条件。
不过,一般来说,您可以使用cte返回行和主键。使用 JOIN 在主键上标识要更新或删除的行。当然,任何列都可以,但是主键通常是最好的。

相关问题