2010-10-19 10 views

Odpowiedz

11

W DELETE można wyświetlać tabele po klauzuli USING, z której wiersze nie są usuwane (tj. Mogą być tylko częścią klauzuli WHERE). Na przykład:

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

Twój Szczególnym przykładem może być osiągnięty bez użycia w ten sposób:

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

W pierwszym przykładzie, wiersze od 11, jak również t2 zostaną usunięte. Wydaje się to przeczyć Twojemu wyjaśnieniu ("możesz wyświetlać tabele po klauzuli USING, z której wiersze nie ** zostają usunięte"). – klokop

0

Klauzula USING służy do ustalenia kryteriów egzystencję kolumn dla dwóch tabel JOIN.

Więc jeśli mam oświadczenie takie jak:

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

co stanie się to, że silnik MySQL będzie najpierw sprawdzić, czy kolumny c1 i c2 istnieć w obu tabelach, a następnie porównać wartości tych kolumn aby wykonać połączenie na dwóch tabelach.

Zobacz dokumentację MySQL dla JOIN Syntax.

+0

Że to kolejne użycie stwierdzenia USING, ale nie tego, do którego się odnosi w jego pytaniu. –

+0

LOL wow Jestem 0 dla 2 dzisiaj na czytanie, co OPs faktycznie proszą ... –

0

Wyszukaj USING w dokumentacji MySQL dla DELETE. To tylko alternatywna składnia.

0

składni dla USING rachunku -

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

Informacje szczegółowe wizyty USING

+0

Nie, użycie opcji 'USING' w pytaniu jest częścią składni DELETE z wieloma tabelami. –

+0

Tak zaktualizowałem mój kod zgodnie z tym. :) – Alpesh