在mysql中有时候更新表的时候会出现 You can't specify target table 'tProjectBaseInfo_a1' for update in FROM clause 的错误。从英文字面解释是:你不能通过查询目录表的值用来更新目录表(大概意思是这样子)
我们通过例子来展示这种案例
mysql> update tProjectBaseInfo_a1 set id =( select id from tProjectBaseInfo_a1 a where a.projectType='0');
ERROR 1093 (HY000): You can't specify target table 'tProjectBaseInfo_a1' for update in FROM clause
mysql>
上面的例子就是更新 tProjectBaseInfo_a1 表的时候,是通过查询tProjectBaseInfo_a1里面的值直接再update到tProjectBaseInfo_a1里面。
为了避免这种问题出现 ,我们可以这样子查
mysql> update tProjectBaseInfo_a1 set id = (select t.id from ( select id from tProjectBaseInfo_a1 a where a.projectType='0') t );
***注意
子查询里面一定要加一个别名(如上面的t)否则会报[Err] 1248 - Every derived table must have its own alias