tables multiple left inner from delete mysql left-join delete-row sql-delete

left - mysql delete rows from multiple tables



Eliminando filas con MySQL LEFT JOIN (3)

Tengo dos tablas, una para las fechas límite de trabajo, una para describir un trabajo. Cada trabajo puede tener un estado y algunos estados significa que los plazos de los trabajos se deben eliminar de la otra tabla.

Puedo SELECT fácilmente los trabajos / fechas límite que cumplen mis criterios con un LEFT JOIN :

SELECT * FROM `deadline` LEFT JOIN `job` ON deadline.job_id = job.job_id WHERE `status` = ''szamlazva'' OR `status` = ''szamlazhato'' OR `status` = ''fizetve'' OR `status` = ''szallitva'' OR `status` = ''storno''

(el status pertenece a job tabla de job no la deadline )

Pero cuando me gustaría eliminar estas filas de la deadline , MySQL arroja un error. Mi consulta es:

DELETE FROM `deadline` LEFT JOIN `job` ON deadline.job_id = job.job_id WHERE `status` = ''szamlazva'' OR `status` = ''szamlazhato'' OR `status` = ''fizetve'' OR `status` = ''szallitva'' OR `status` = ''storno''

El error de MySQL no dice nada:

Usted tiene un error en su sintaxis SQL; revise el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de ''LEFT JOIN job ON ON deadline.job_id = job.job_id WHERE status ='' szaml ''en la línea 1

¿Cómo puedo convertir mi SELECT en una consulta DELETE activa?


Si está utilizando "tabla como", especifíquelo para eliminar.

En el ejemplo elimino todas las filas de la tabla_1 que no existen en la tabla_2.

DELETE t1 FROM `table_1` t1 LEFT JOIN `table_2` t2 ON t1.`id` = t2.`id` WHERE t2.`id` IS NULL


Simplemente necesita especificar en qué tablas aplicar el DELETE .

Eliminar solo las filas de deadline :

DELETE `deadline` FROM `deadline` LEFT JOIN `job` ....

Eliminar la deadline y job filas de job :

DELETE `deadline`, `job` FROM `deadline` LEFT JOIN `job` ....

Eliminar solo las filas del job :

DELETE `job` FROM `deadline` LEFT JOIN `job` ....


DELETE FROM deadline where ID IN ( SELECT d.ID FROM `deadline` d LEFT JOIN `job` ON deadline.job_id = job.job_id WHERE `status` = ''szamlazva'' OR `status` = ''szamlazhato'' OR `status` = ''fizetve'' OR `status` = ''szallitva'' OR `status` = ''storno'');

No estoy seguro de si ese tipo de sub consulta funciona en MySQL, pero pruébalo. Supongo que tiene una columna de ID en su tabla de plazos.