Tienes que ponerlo en join
cláusula, no el 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
Mira, con una inner join
, poniendo una cláusula en join
o el where
es equivalente. Sin embargo, con una outer join
, son muy diferentes.
Como join
condición, especifica el conjunto de filas que se unirá a la tabla. Esto significa que evalúa user_id = 1
primero, y toma el subconjunto de user_category_subscriptions
con un user_id
de 1
para unirse a todas las filas en categories
. Esto le dará todas las filas en categories
, mientras que solo las categories
que este usuario en particular se haya suscrito tendrá cualquier información en user_category_subscriptions
columnas Por supuesto, todas las demás categories
se completará con null
en el user_category_subscriptions
columnas.
Por el contrario, un where
cláusula hace la unión, y luego reduce el conjunto de filas. Entonces, esto hace todas las uniones y luego elimina todas las filas donde user_id
no es igual a 1
. Te queda una forma ineficiente de obtener una inner join
.
¡Espero que esto ayude!