2013-06-10 10 views
5

Sto aggiornando e ottimizzando una vecchia struttura di tabella. Per funzionare correttamente con replace into, rimuovo le vecchie voci di zombie che interferiscono con la nuova chiave univoca su 2 colonne.Errore n. 1093 - Non è possibile specificare la tabella di destinazione "relProductsPrices" per l'aggiornamento nella clausola FROM

Query:

DELETE from `relProductsPrices` where `ID` in 

    (SELECT scanA.ID from `relProductsPrices` as scanA 
      inner join `relProductsPrices` as scanB 

    where scanA.ID  < scanB.ID 
    and scanA.product = scanB.product 
    and scanA.priceName = scanB.priceName); 

Errore:

#1093 - You can't specify target table 'relProductsPrices' for update in FROM clause 

non sono sicuro di come ottenere questo in un unico MySQL Query correttamente, in questo momento?

Spero che questa domanda non sia una voce duplicata, mi è sembrato impossibile trovare una voce adattabile simile. Ci sono domande riguardo a questo errore, ma non sto avendo una query di aggiornamento qui, e la soluzione che la maggior parte delle persone afferma (crea una sottoselezione) era già stata fatta da me in precedenza.

Grazie in anticipo!

+2

la soluzione più persone dello stato è quello di avere un altro livello di sub-SELECT. Hai solo un livello. –

risposta

10

Prova questo:

DELETE FROM `relProductsPrices` 
WHERE `ID` IN ( 
    SELECT 
     tmp.ID 
    FROM (
     SELECT 
     scanA.ID 
     FROM 
     `relProductsPrices` as scanA 
     INNER JOIN `relProductsPrices` as scanB 
     ON scanA.ID  < scanB.ID 
     AND scanA.product = scanB.product 
     AND scanA.priceName = scanB.priceName 
    ) as tmp 
); 
+0

La logica dietro questo mi confonde davvero, ma onestamente, funziona come un fascino. Grazie mille. –

+1

Np, è contento che funzionasse :) Come @MartinSmith ha ben evidenziato che era necessario un altro livello di sottoselezione – Stephan

+0

Sì, in qualche modo mi sono perso. Ma onestamente ... davvero non capisco come sia più logico di quello che ho provato, anche se funziona. Grazie –

Problemi correlati