删除 MySQL 中与特定客户端相关的帖子
问题:
我们的数据库包含三个表:clients
、projects
和 posts
。 目标是删除链接到特定客户的所有帖子。 以下 SQL 语句无效:
<code class="language-sql">DELETE FROM posts INNER JOIN projects ON projects.project_id = posts.project_id WHERE projects.client_id = :client_id;</code>
posts
表缺少直接的 client_id
外键;它只拥有一个 project_id
外键。
解决方案:
要消除与属于特定客户的项目相关的帖子,DELETE
语句必须明确针对 posts
表。更正后的查询是:
<code class="language-sql">DELETE posts FROM posts INNER JOIN projects ON projects.project_id = posts.project_id WHERE projects.client_id = :client_id;</code>
替代解决方案:
更有效的方法是在 ON DELETE CASCADE
和 projects
表之间建立外键关系时实现 posts
约束。当相关项目被删除时,这会自动删除帖子。 修改后的 SQL 查询变为:
<code class="language-sql">DELETE FROM projects WHERE client_id = :client_id;</code>
此方法利用 ON DELETE CASCADE
约束同时删除所有相关帖子。
以上是如何使用 MySQL 连接删除与特定客户端相关的帖子?的详细内容。更多信息请关注PHP中文网其他相关文章!