2012-05-07 1 views
21

Ho provato questo con MySQL:ELIMINA DA `table` AS` alias` ... WHERE `alias` .column` ... perché errore di sintassi?

DELETE FROM `contact_hostcommands_relation` AS `ContactHostCommand` WHERE (`ContactHostCommand`.`chr_id` = 999999) LIMIT 1 

e ottengo questo:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE (`ContactHostCommand`.`chr_id` = 999999) LIMIT 1' at line 1 

Nota: Questa query viene generato automaticamente e le condizioni sono basate su alias di tabella.

Perché ho ricevuto questo errore?

C'è un modo per utilizzare gli alias di tabella nella clausola where?

È questo MySQL specifico?

+1

Provare lo stesso senza 'AS'. Basta rimuoverlo. – sp00m

+0

@ sp00m Ho provato ma non funziona. Grazie comunque per l'idea. –

risposta

27

È possibile utilizzare SQL come questo:

DELETE FROM ContactHostCommand 
USING `contact_hostcommands_relation` AS ContactHostCommand 
WHERE (ContactHostCommand.`chr_id` = 999999) 
LIMIT 1 
+0

Bello. È questo MySQL specifico? –

+0

Non so davvero come avevo solo bisogno di questo in MySQL. La mia ipotesi è una soluzione MySQL per non supportare DELETE da alias. – Sarunas

+2

per MSSQL: DELETE ContactHostCommand FROM 'contact_hostcommands_relation' AS ContactHostCommand – Matus

5

Non è possibile utilizzare AS in una clausola DELETE con MySQL:

DELETE FROM `contact_hostcommands_relation` WHERE (`chr_id` = 999999) LIMIT 1 
+0

Funziona. Ma avevo bisogno di alias di tabelle per specificare le condizioni per il generatore di query. Ora sto usando una variabile speciale che contiene il nome del modello corrente. Il nome del modello è diverso dal nome della tabella. È una questione di omogeneità. –

+3

In realtà, lui può. Vedi la risposta accettata. –

22

Cosa @Matus e @CeesTimmerman detto di MSSQL, lavori in MySQL 5.1 .73 ugualmente:

delete <alias> from <table> <alias> where <alias>.<field>...