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
inner join
で参照してください 、join
に句を入れます またはwhere
同等です。ただし、outer join
を使用する場合 、それらは大きく異なります。
join
として 条件では、テーブルに結合する行セットを指定します。これは、user_id = 1
を評価することを意味します 最初に、user_category_subscriptions
のサブセットを取得します user_id
を使用 1
の categories
のすべての行に参加します 。これにより、categories
のすべての行が表示されます 、categories
のみ この特定のユーザーがサブスクライブしていることは、user_category_subscriptions
に情報があります。 列。もちろん、他のすべてのcategories
null
が入力されます user_category_subscriptions
で 列。
逆に、where
句が結合を行い、次に 行セットを減らします。したがって、これによりすべての結合が実行され、user_id
が存在するすべての行が削除されます。 1
と等しくありません 。 inner join
を取得するための非効率的な方法が残っています 。
これがお役に立てば幸いです!