Aquí está el script para crear mis tablas:
CREATE TABLE clients (
client_i INT(11),
PRIMARY KEY (client_id)
);
CREATE TABLE projects (
project_id INT(11) UNSIGNED,
client_id INT(11) UNSIGNED,
PRIMARY KEY (project_id)
);
CREATE TABLE posts (
post_id INT(11) UNSIGNED,
project_id INT(11) UNSIGNED,
PRIMARY KEY (post_id)
);
En mi código PHP, al eliminar un cliente, quiero eliminar todas las publicaciones de proyectos:
DELETE
FROM posts
INNER JOIN projects ON projects.project_id = posts.project_id
WHERE projects.client_id = :client_id;
La tabla de publicaciones no tiene una clave foránea client_id, solo project_id. Quiero eliminar las publicaciones en proyectos que han pasado client_id.
Esto no funciona en este momento porque no se eliminan las publicaciones.
DELETE posts FROM posts JOIN projects ..., en lugar de un IN (subquery)patrón. (La respuesta de Yehosef da un ejemplo del patrón preferido.)
aliaspara el nombre de la tabla y usar eso.