Devi inserirlo nel join clausola, non il 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
Vedi, con un inner join , inserendo una clausola nel join o il where è equivalente. Tuttavia, con un outer join , sono molto diversi.
Come join condizione, si specifica il set di righe che si unirà alla tabella. Ciò significa che valuta user_id = 1 prima, e prende il sottoinsieme di user_category_subscriptions con un user_id di 1 per unirti a tutte le righe in categories . Questo ti darà tutte le righe in categories , mentre solo le categories a cui questo particolare utente si è iscritto avrà tutte le informazioni in user_category_subscriptions colonne. Naturalmente, tutte le altre categories sarà popolato con null nella user_category_subscriptions colonne.
Al contrario, un where la clausola fa il join, e quindi riduce il set di righe. Quindi, questo esegue tutti i join e quindi elimina tutte le righe in cui user_id non è uguale a 1 . Ti rimane un modo inefficiente per ottenere un inner join .
Speriamo che questo aiuti!