错误信息:You can't specify target table 'xxxxx' for update in FROM clause
where cabf_id in (
SELECT 表名.cabf_id FROM 表名
Inner Join wms_cabinet ON 表名.cabf_cab_id = wms_cabinet.cab_id
Inner Join wms_cabinet_row ON wms_cabinet.cab_row_id =wms_cabinet_row.row_id
where wms_cabinet_row.row_site_id=27 and 表名.cabf_enabled=1)
解决方法:
原语句:
update 表名 set cabf_enabled=0
where cabf_id in (
SELECT 表名.cabf_id FROM 表名
Inner Join wms_cabinet ON 表名.cabf_cab_id = wms_cabinet.cab_id
Inner Join wms_cabinet_row ON wms_cabinet.cab_row_id =wms_cabinet_row.row_id
where wms_cabinet_row.row_site_id=27 and 表名.cabf_enabled=1)
更改后语句:
update 表名 set cabf_enabled=0 where cabf_id in (
SELECT a.cabf_id FROM (select tmp.* from 表名 tmp) a
Inner Join wms_cabinet b ON a.cabf_cab_id = b.cab_id
Inner Join wms_cabinet_row c ON b.cab_row_id = c.row_id
where c.row_site_id=29 and a.cabf_enabled=1)
百度来的方法,经测试可以用,具体机制原因不清楚
SELECT a.cabf_id FROM (select tmp.* from 表名 tmp) a
Inner Join wms_cabinet b ON a.cabf_cab_id = b.cab_id
Inner Join wms_cabinet_row c ON b.cab_row_id = c.row_id
where c.row_site_id=29 and a.cabf_enabled=1)
百度来的方法,经测试可以用,具体机制原因不清楚
本文介绍了一种解决SQL更新语句中“Youcan'tspecifytargettable'xxxxx'forupdateinFROMclause”错误的方法。通过调整子查询结构,确保更新表不在FROM子句中引用自身,有效避免了该错误的发生。
753

被折叠的 条评论
为什么被折叠?



