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!