MySQL で特定のクライアントに関連付けられた投稿を削除する
問題:
データベースには、clients
、projects
、posts
の 3 つのテーブルが含まれています。 目標は、特定のクライアントにリンクされているすべての投稿を削除することです。 次の 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 中国語 Web サイトの他の関連記事を参照してください。