Você precisa colocá-lo no
join
cláusula, não o 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
Veja, com uma
inner join
, colocando uma cláusula no join
ou o where
é equivalente. No entanto, com uma outer join
, eles são muito diferentes. Como uma
join
condição, você especifica o conjunto de linhas que você unirá à tabela. Isso significa que ele avalia user_id = 1
primeiro e pega o subconjunto de user_category_subscriptions
com um user_id
de 1
para juntar-se a todas as linhas em categories
. Isso lhe dará todas as linhas em categories
, enquanto apenas as categories
que esse usuário em particular se inscreveu terá qualquer informação no user_category_subscriptions
colunas. Claro, todas as outras categories
será preenchido com null
em user_category_subscriptions
colunas. Por outro lado, um
where
cláusula faz a junção e então reduz o conjunto de linhas. Então, isso faz todas as junções e elimina todas as linhas em que user_id
não é igual a 1
. Você ficou com uma maneira ineficiente de obter uma inner join
. Espero que isso ajude!