2016-09-06 2 views
-1
UPDATE market_order 
SET is_wechat = 1 
WHERE 
    id IN (
     SELECT 
      a.id 
     FROM 
      market_order a 
     LEFT JOIN market_order_detail b ON a.id = b.order_id 
     WHERE 
      b.template_id IN (
       SELECT 
        id 
       FROM 
        market_template 
       WHERE 
        core_id = 2 
       AND is_wechat = 1 
      ) 
    ) 

FehlerUPDATE Tabelle mit wählen die gleiche tablein Multi-Table

[Err] 1093 abfragt - Sie können keine Zieltabelle 'market_order' für in FROM-Klausel Update angeben

Antwort

0

Sie können es mit UPDATE..JOIN statt:

UPDATE market_order a 
JOIN market_order_detail b 
ON(a.id = b.order_id) 
JOIN market_template t 
ON(b.template_id = t.id) 
SET a.is_wechat = 1 
WHERE t.core_id = 2 AND t.is_wechat = 1 

MySQL erlaubt nicht die Verwendung einer Auswahl aus der Zieltabelle innerhalb der WHERE Klausel.

Auch - wenn LEFT JOIN verwendet wird, sollten Filter auf der rechten Tabelle nur innerhalb der ON() Klausel angegeben werden.

+0

es nun, vielen Dank funktioniert! –

0

können Sie versuchen, es innerhalb von 1 Abfrage zu machen:

update market_order mo set is_wechat = 1 left join 
market_order_detail mod on mo.id = mod.order_id inner join 
market_template mt on mt.id = mod.teplate_id where mt.core_id = 2 
and mt.is_wechat = 1 
+0

'mod' kann nicht kurz sein ~~ es hat auch mein Problem gelöst, vielen Dank. –