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 
  );
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章