MySQL: WHERE 句を使用したテーブルの結合
MySQL データベース内の複数のテーブルを操作する場合、多くの場合、取得するために JOIN を実行する必要があります。関連データ。ただし、WHERE 句を LEFT JOIN に追加すると、複雑さが生じる可能性があります。
問題:
カテゴリ テーブルから、サブスクライブされたカテゴリを含むすべてのカテゴリを取得したいと考えています。単一のクエリを使用して、user_category_subscriptions テーブル内の特定のユーザーを検索します。ただし、最初の LEFT JOIN に WHERE 句を追加しても、望ましい結果が返されません。
初期クエリ:
SELECT * FROM categories LEFT JOIN user_category_subscriptions ON user_category_subscriptions.category_id = categories.category_id
解決策:
必要なデータを取得するには、代わりに WHERE 句を JOIN 条件に組み込む必要があります。 WHERE 句よりも。これにより、WHERE 条件を満たす行のみが結合に含まれるようになります:
SELECT * FROM categories LEFT JOIN user_category_subscriptions ON user_category_subscriptions.category_id = categories.category_id AND user_category_subscriptions.user_id = 1 -- Example user ID
説明:
JOIN 句に WHERE 条件を置くことで、 user_category_subscriptions のどの行をカテゴリの各行に結合するかを指定します。これにより、特定のユーザー (この例では user_id = 1) の行のみが結合に含まれるようになります。
結果は、カテゴリ内のすべてのカテゴリのリストとなり、カテゴリの user_category_subscriptions 列には NULL 値が含まれます。指定されたユーザーによって購読されていません。
以上がMySQL LEFT JOIN で WHERE 句を正しく使用して、すべてのカテゴリとユーザー サブスクリプションを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。