2010-10-19 16 views

risposta

11

In un ELIMINA, è possibile elencare le tabelle dopo la clausola USING, da cui le righe non vengono eliminate (vale a dire, essere solo parte della clausola WHERE). Per esempio:

DELETE FROM t1, t2 
    USING t1 
    INNER JOIN t2 
    INNER JOIN t3 
    WHERE t1.id=t2.id AND 
     t2.id=t3.id; 

Il vostro esempio particolare può essere raggiunto senza l'utilizzo in questo modo:

DELETE l,s 
FROM l 
    INNER JOIN s 
    ON s.skill_id = l.id 
WHERE s.user_id = 3 
+0

Nel tuo primo esempio, le righe da 11 e t2 saranno eliminate. Questo sembra contraddire la tua spiegazione ("puoi elencare le tabelle dopo la clausola USING, da cui le righe ** non ** vengono cancellate"). – klokop

0

La clausola USING viene utilizzato per impostare i criteri delle colonne vigore da due tabelle in un join.

Quindi, se ho una dichiarazione come:

SELECT * from a 
JOIN b 
USING (c1,c2) 
... 

ciò che accadrà è che il motore MySQL prima verificare che le colonne c1 e c2 esistono in entrambe le tabelle, e quindi confrontare i valori di tali colonne per eseguire il join sui due tavoli.

Vedere documentazione MySQL per JOIN Syntax.

+0

Quello è un altro uso dell'istruzione USING, ma non di quello a cui si riferisce nella sua domanda. –

+0

LOL wow Sono 0 per 2 oggi a leggere cosa stanno effettivamente chiedendo gli OP ... –

0

Cerca USING nella documentazione MySQL per DELETE. È solo una sintassi alternativa.

0

Sintassi per USING dichiarazione -

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] 
    FROM tbl_name[.*] [, tbl_name[.*]] ... 
    USING table_references 
    [WHERE where_condition] 

per informazioni dettagliate visita USING

+0

No, l'uso di 'USING' nella domanda fa parte della sintassi DELETE multi-table. –

+0

Si è aggiornato il mio codice in base a ciò. :) – Alpesh