今天在处理一个表的数据时,想直接把某个人对应的数据,对应到另一个人上去,思想很简单,就是把第一个人的对应的ID查出来,然后再用更新语句将所有ID在这里边的做一个更新操作,思路很清晰,操作很简单。好的,代码写好了直接操作数据库,

1
UPDATE house h SET h.Fuser_id = 79063 WHERE h.Fid IN (SELECT Fid from house WHERE Fuser_id = 79056 AND Fdistrict1 = '' AND Fis_process = 0);

但是在具体操作的过程中,问题出现了,问题是You can’t specify target table ‘A’ for update in FROM clause,问题出在哪了,一查资料原因是在更新这个表和数据时又查询了它,而查询的数据又做了更新的条件。
解决方案呢就是先将查出的表作为一个第三方表,然后查询第三方表实现隔离操作。
1
UPDATE house h SET h.Fuser_id = 79063 WHERE h.Fid IN (SELECT temp.Fid FROM (SELECT Fid from house WHERE Fuser_id = 79056 AND Fdistrict1 = '' AND Fis_process = 0) temp );

当然这种做法是最佳的选择,还有一个笨方法就是建立一个temp临时表,插入临时表,然后查询临时表,当然该方法的优点是在遇到数据量大的情况下,可以避免数据库内存不够用而导致的宕机。