mysql中的一个特殊问题:You can’t specify target table ‘abc’ for update in FROM clause

来源:互联网 发布:大数据是考研什么专业 编辑:程序博客网 时间:2024/05/21 18:00

今天在处理数据的时候,需要update医院的行政编码。在医院(hospital)表,医院所在地一般记做“海淀,东城”,而在行政区码(codenum)中,却是“海淀区,东城区” 
为了解决这个问题,首先使用了Mysql中的CONCAT函数。

SELECT hospital.district FROM hospital, codename WHERE codename.`name` IN( SELECT CONCAT(district,"区") FROM hospital)

得到 


当我以为剩下的工作,用如下的updata语句就可以解决的时候,

UPDATE hospital, codenameSET hospital.qu=codename.numWHERE hospital.qu IN(SELECT hospital.district FROM hospital, codename WHERE codename.`name` IN( SELECT CONCAT(district,'区') FROM hospital))

却报错了:You can't specify target table 'hospital' for update in FROM clause 
意思应该就是,你要update一个表的时候,不能让这个表出现在FROM里面(应该是会导致死循环思密达)。

解决方法也很愚蠢,新建一个tmp表。然后用这个表进行UPDATE

CREATE TABLE tmp ASSELECT hospital.district, codename.num FROM hospital, codename WHERE codename.`name` IN( SELECT CONCAT(district,'区') FROM hospital)
0 0
原创粉丝点击