Du måste lägga den i join satsen, inte 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
Se, med en inner join , sätta en sats i join eller where är likvärdig. Men med en outer join , de är väldigt olika.
Som en join villkor, anger du raduppsättningen som du ska ansluta till tabellen. Det betyder att den utvärderar user_id = 1 först och tar delmängden av user_category_subscriptions med ett user_id av 1 för att gå med i alla rader i categories . Detta ger dig alla rader i categories , medan endast categories som den här användaren har prenumererat på kommer att ha all information i user_category_subscriptions kolumner. Naturligtvis alla andra categories kommer att fyllas i med null i user_category_subscriptions kolumner.
Omvänt, en where satsen gör join, och sedan minskar raduppsättningen. Så detta gör alla kopplingar och eliminerar sedan alla rader där user_id är inte lika med 1 . Du har ett ineffektivt sätt att få en inner join .
Förhoppningsvis hjälper detta!