mysql出现“ You can't specify target table '表名' for update in FROM clause”解决方法

一、原因

不能先select出同一表中的某些值,再update这个表(在同一语句中),即不能依据某字段值做判断再来更新某字段的值

二、例子

例如下面想更新v_shop的wallet_switch在查询条件中出现就会报错

UPDATE
  v_shop
set
  wallet_switch = 1
WHERE
  id in(
    select
      b.id
    from
      v_shop_contract as a,
      v_shop as b
    where
      a.shop_id = b.id
      and b.wallet_switch = 0
  );

三、解决方案

把结果集当作一个表,自我查询一遍,再作为in的条件,格式为:SELECT id FROM (结果集) as d

UPDATE v_shop
set wallet_switch = 1 
WHERE
  id IN (
  select
    id 
  FROM
    (
    SELECT
      b.id 
    FROM
      v_shop_contract AS a,
      v_shop AS b 
    WHERE
      a.shop_id = b.id 
      AND b.wallet_switch = 0 
    ) AS d 
  );
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章