2011-09-04 15 views
9

Ho la seguente query MySQL:MySQL cancellare con query di selezione annidati

DELETE FROM catalogue 
WHERE catalogue_id IN (
    SELECT catalogue_id 
    FROM catalogue 
    WHERE (
    product_id = (SELECT product_id FROM catalogue WHERE catalogue_id = '2290') 
    AND length_id = (SELECT length_id FROM catalogue WHERE catalogue_id = '2290') 
    AND gauge_id = (SELECT gauge_id FROM catalogue WHERE catalogue_id = '2290') 
) 
) 

Ma quando tento di eseguire ricevo il seguente messaggio di errore:

Non è possibile specificare tabella di destinazione ' catalogo 'per l'aggiornamento in clausola

Qualcuno potrebbe consigliare dove sto andando male?

risposta

13

Eseguire doppio nidificazione

DELETE FROM catalogue 
WHERE catalogue_id IN (SELECT catalogue_id FROM (
    SELECT catalogue_id 
    FROM catalogue 
    WHERE (
    product_id = (SELECT product_id FROM catalogue WHERE catalogue_id = '2290') 
    AND length_id = (SELECT length_id FROM catalogue WHERE catalogue_id = '2290') 
    AND gauge_id = (SELECT gauge_id FROM catalogue WHERE catalogue_id = '2290') 
)) x 
) 

inganna mysql

+0

Funziona perfettamente con zerkms, ma quale è la ragione per dover "ingannare" MySQL? –

+0

Che dire se hai più di una colonna 'WHERE'? Ad esempio: DELETE FROM catalogo WHERE catalogue_id AND catalogue_name IN ... ' – ThreaT

+0

@ThreaT: Non sono sicuro di cosa stai chiedendo. È possibile aggiungere più predicati con 'ADD', sì. – zerkms

4

oppure è possibile utilizzare tabella temporanea:

CREATE TEMPORARY TABLE t AS 
    SELECT catalogue_id 
    FROM catalogue 
    WHERE (
    product_id = (SELECT product_id FROM catalogue WHERE catalogue_id = '2290') 
    AND length_id = (SELECT length_id FROM catalogue WHERE catalogue_id = '2290') 
    AND gauge_id = (SELECT gauge_id FROM catalogue WHERE catalogue_id = '2290') 
); 

    DELETE FROM catalogue WHERE catalogue_id IN (SELECT catalogue_id FROM t); 

con la query che hai You can't specify target table 'catalogue' for update in FROM clause perché non si può fare di selezione e aggiornamento sulla stessa tabella in una query.

+0

Grazie Kamil per la spiegazione. –

Problemi correlati