2012-05-07 15 views
21

He intentado esto con MySQL:ELIMINAR DE `table` AS` alias` ... WHERE `alias``column` ... ¿por qué error de sintaxis?

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

y me sale esto:

#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: Esta consulta se genera automáticamente y condiciones se basan en los alias de tabla.

¿Por qué me aparece este error?

¿Hay alguna forma de utilizar alias de tabla en cláusula where?

¿Es esto específico de MySQL?

+1

Pruebe lo mismo sin 'AS'. Solo elimínalo. – sp00m

+0

@ sp00m Lo intenté pero no funciona. Gracias por la idea de todos modos. –

Respuesta

27

Usted puede utilizar SQL como esto:

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

Agradable. Es este MySQL específico? –

+0

Realmente no sé, ya que solo necesitaba esto en MySQL. Supongo que esta es una solución de MySQL para no apoyar DELETE desde alias. – Sarunas

+2

para MSSQL: ELIMINAR ContactHostCommand DE 'contact_hostcommands_relation' COMO ContactHostCommand – Matus

5

No se puede utilizar en una cláusula ASDELETE con MySQL:

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

Funciona. Pero necesitaba alias de tabla para especificar condiciones para el generador de consultas. Ahora estoy usando una variable especial que contiene el nombre del modelo actual. El nombre del modelo es diferente del nombre de la tabla. Es una cuestión de homogeneidad. –

+3

En realidad, él puede. Ver la respuesta aceptada. –

22

Lo @Matus y @CeesTimmerman dijeron de MSSQL, trabaja en MySQL 5.1 .73 también:

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