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 WHEREstatus
='' 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.