Mysql 中You can't specify target table 's' for update in FROM clause的错误

1、出现错误的过程。这个是我在查询同时更新一张表的过程出现的,例子如下:

UPDATE node_table n SET n.node_id_str=

CONCAT((SELECT a.node_id_str FROM node_table a WHERE a.node_id=n.node_parent_id),n.node_parent_id,'_')

此时报了You can't specify target table 's' for update in FROM clause这样的错误,意思是“你不能更新指定的表‘s’,在含有FROM的字句中”。

2、分下原因。从错误字面很容易理解错误为“UPDATE中不能使用FROM”,其实大致意思是我们不能在同一张表中进行查询的同时进行更新。这样做的原因应该就是防止在修改完成之前用户拿到错误的数据。

3、解决办法。既然不能同时操作一张表,那我就用两张表。这里用到了mysql数据库的虚表(有必要的同学可以了解下)。例子如下:

UPDATE node_table n SET n.node_id_str=
(
SELECT CONCAT(t.node_id_str,n.node_parent_id,'_') 
FROM (SELECT a.* FROM node_table a) t WHERE t.safety_acceptance_node_id=n.node_parent_id 

这样就成功修改了表。这里的t就是虚表表名,他的表结构和内容完全是复制了node_table 的。这样的话是不是还有一种方式那呢?有!那就是把node_table的表复制一份创建一个真正的表作为查询的表,其实没必要这样做因为这样显得我们太业余了!

你可能感兴趣的:(mysql,MySQL)