博客园

MySql 查询并新增 和 查询并更新

  • 查询结果添加到另一张表中
    INSERT INTO B (B1,B2,B3) SELECT A1,A2,A3 FROM A

  • 查询结果添加到另一张表中

一般的写法是:

UPDATE A SET A3 = (SELECT B3 FROM WHERE B1 = 1 )

这样的写法Oracle和SQLService来说都是正确的。但是MYSQL会报一个错误

原因:mysql再from子句中遇到子查询时,先执行子查询并将结果放到一个临时表中,我们通常称它为“派生表”;临时表是没有索引、无法加锁。

update时,会锁表,此时不能再select。所以会报错,

此时如果将结果集放入临时表,临时表不会上锁,所以正常查询并更新

UPDATE A SET A3 = (SELECT B3 FROM ( SELECT * FROM B ) AS C WHERE B1 = 1 )

posted @ 2021-11-03 22:04  放纵!  阅读(571)  评论(0)    收藏  举报