Вот скрипт для создания моих таблиц:
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)
);
В моем PHP-коде при удалении клиента я хочу удалить все сообщения проектов:
DELETE
FROM posts
INNER JOIN projects ON projects.project_id = posts.project_id
WHERE projects.client_id = :client_id;
Таблица сообщений не имеет внешний ключ client_id
, только project_id
. Я хочу удалить сообщения в проектах, которые прошли client_id
.
Это не работает сейчас, потому что ни один пост не удален.
DELETE posts FROM posts JOIN projects ...
, а не IN (subquery)
шаблон. (Ответ от Yehosef приводит пример предпочтительного паттерна.)
alias
для имени таблицы и использовать это.