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!