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を取得するための非効率的な方法が残っています 。
これがお役に立てば幸いです!