Vous devez le mettre dans le join
clause, pas la 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
Voir, avec une inner join
, en mettant une clause dans le join
ou le where
est équivalent. Cependant, avec une outer join
, ils sont très différents.
En tant que join
condition, vous spécifiez l'ensemble de lignes que vous allez joindre à la table. Cela signifie qu'il évalue user_id = 1
d'abord, et prend le sous-ensemble de user_category_subscriptions
avec un user_id
de 1
pour joindre toutes les lignes des categories
. Cela vous donnera toutes les lignes dans categories
, alors que seules les categories
auquel cet utilisateur particulier s'est abonné aura des informations dans le user_category_subscriptions
Colonnes. Bien sûr, toutes les autres categories
sera rempli avec null
dans les user_category_subscriptions
colonnes.
Inversement, un where
la clause fait la jointure, et alors réduit l'ensemble de lignes. Donc, cela fait toutes les jointures, puis élimine toutes les lignes où user_id
n'est pas égal à 1
. Il vous reste un moyen inefficace d'obtenir une inner join
.
J'espère que cela vous aidera !