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

mysql - multiple - Eliminar de una tabla con unir



mysql delete join table (3)

MySQL DELETE registros con JOIN

Elimine varios registros de varias tablas utilizando la consulta única como se muestra a continuación:

Por lo general, se usa INNER JOIN en la instrucción SELECT para seleccionar registros de una tabla que tienen registros correspondientes en otras tablas. También podemos usar la cláusula INNER JOIN con la instrucción DELETE para eliminar registros de una tabla y también los registros correspondientes en otras tablas, por ejemplo, para eliminar registros de tablas T1 y T2 que cumplan con una condición particular, use la siguiente declaración:

DELETE T1, T2 FROM T1 INNER JOIN T2 ON T1.key = T2.key WHERE condition

Observe que coloca los nombres de tabla T1 y T2 entre BORRAR y DESDE. Si omite la tabla T1, la instrucción DELETE solo borra los registros de la tabla T2 y, si omite la tabla T2, solo se eliminarán los registros de la tabla T1.

La condición de combinación T1.key = T2 .key especifica los registros correspondientes en la tabla T2 que deben eliminarse.

La condición en la cláusula WHERE especifica qué registros en el T1 y el T2 deben borrarse.

Estoy tratando de eliminar registros de una base de datos en base a los criterios de selección de otra. Tenemos dos tablas, emailNotification que almacena una lista de trabajos y correos electrónicos. Entonces tenemos trabajos. Quiero borrar las notificaciones de correo electrónico para los trabajos que se han cerrado. Encontré algunos ejemplos anteriores en Stackoverflow que me llevaron a este tipo de sintaxis (anteriormente estaba tratando de hacer la unión antes de donde).

DELETE FROM emailNotification WHERE notificationId IN ( SELECT notificationId FROM emailNotification e LEFT JOIN jobs j ON j.jobId = e.jobId WHERE j.active = 1 )

Recibo el error, no puede especificar la tabla de destino ''emailNotication'' para actualizar en la cláusula FROM.


No estoy seguro de su requerimiento. Lo que entendí de su pregunta es que desea eliminar todos los correos electrónicos de los trabajos que están cerrados. prueba este;

DELETE e FROM emailNotification e LEFT JOIN jobs j ON j.jobId = e.jobId WHERE j.active = 1 AND CURDATE() < j.closeDate


Podría intentar algo como lo siguiente:

DELETE FROM emailNotification WHERE jobId IN ( SELECT jobId FROM jobs j WHERE j.active = 1 )