Ось сценарій для створення моїх таблиць:
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)візерунок. (Відповідь Єгосефа дає приклад бажаного шаблону.)
aliasдля назви таблиці та використовувати це.