MySQL的一个比较特殊的问题:你不能指定目标表wms_ca
MySQL语句如下所示:
更新wms_cabinet_form集cabf_enabled = 0
在那里cabf_id(
选择wms_cabinet_form.cabf_id从wms_cabinet_form
内部联接wms_cabinet_form.cabf_cab_id = wms_cabinet.cab_id wms_cabinet
内部联接wms_cabinet.cab_row_id = wms_cabinet_row.row_id wms_cabinet_row
在wms_cabinet_row。row_site_id = 27和wms_cabinet_form cabf_enabled = 1)。
下面的建议提出:你不能在运行时指定目标table'wms_cabinet_form'for更新子句中
将SELECT语句运行于:
选择wms_cabinet_form.cabf_id从wms_cabinet_form
内部联接wms_cabinet_form.cabf_cab_id = wms_cabinet.cab_id wms_cabinet
内部联接wms_cabinet.cab_row_id = wms_cabinet_row.row_id wms_cabinet_row
在wms_cabinet_row。row_site_id = 27和wms_cabinet_form cabf_enabled = 1。
选择的正确结果可以是正确的,然后直接将结果写入到内部,下面的语句如下所示:
更新wms_cabinet_form集cabf_enabled = 0,cabf_id在('113 ','114 ','115),你可以运行正确更新。
在这一点上,我不明白为什么它会与SELECT子句错误。在过去,它是写在MSSQL很常见。
没办法,只能用百度。找两条记录。
最初的原因是:MySQL不能这样使用。(等待MySQL升级)。英文错误信息是您不能首先在同一个表中选择一些值。
表再次更新(在同一语句中)。另一个选项是,重写和重写SQL。
重写后的SQL如下所示,您可以发挥作用。
更新wms_cabinet_form集cabf_enabled = 0(cabf_id在哪里
从选择a.cabf_id(选择TMP。* wms_cabinet_form TMP)一
内部联接wms_cabinet B a.cabf_cab_id = b.cab_id
内部联接wms_cabinet_row C对b.cab_row_id = c.row_id
在c.row_site_id = 29和a.cabf_enabled = 1)
重点是在选择a.cabf_id从(选择TMP。* wms_cabinet_form TMP),我选择TMP。*,作为一个子集,
然后选择从a.cabf_id子集,没有选择和更新同一个表。这个问题已经得到很好的解决。