MySQL JOIN と WHERE 句を使用して関連データを取得する
MySQL では、テーブルを結合することで、複数のテーブルのデータを 1 つのテーブルに結合できます。結果セット。ただし、LEFT JOIN などの外部結合に WHERE 句を追加すると、結合の動作が変わる可能性があります。
問題:
次のようなシナリオを考えてみましょう。 「カテゴリ」と「user_category_subscriptions」という 2 つのテーブルがあり、特定のユーザーが特定の機能で購読しているカテゴリを含むすべてのカテゴリを取得したいとします。 "ユーザーID。"以下の最初のクエリは、2 つのテーブル間で LEFT JOIN を実行します:
SELECT * FROM categories LEFT JOIN user_category_subscriptions ON user_category_subscriptions.category_id = categories.category_id
Challenge:
当初の目標は、内部結合 (または等価結合) を実装することでした。 ) WHERE 句を使用します。ただし、上記のクエリは外部結合、特に左外部結合であり、「user_category_subscriptions」テーブルに対応する値がない場合でも行が返されることは妨げられません。
解決策:
望ましい結果を達成するには、WHERE 句ではなく JOIN 文自体に 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
左結合では、WHERE 句は結合操作の後に適用されるフィルターとして機能します。 JOIN ステートメントに条件を含めることにより、結果に行が含まれるために満たす必要がある条件を効果的に指定することになります。これにより、「user_id」が 1 に等しい行のみが結合されて返されることが保証されます。
以上が関連データを取得する場合、WHERE 句は MySQL の LEFT JOIN にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。