Du skal indsætte det i join klausul, ikke 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 , ved at sætte en klausul i join eller where er tilsvarende. Dog med en outer join , de er vidt forskellige.
Som en join betingelse, angiver du rækkesættet, som du vil forbinde til tabellen. Det betyder, at den evaluerer user_id = 1 først og tager undersættet af user_category_subscriptions med et user_id af 1 for at slutte sig til alle rækkerne i categories . Dette vil give dig alle rækkerne i categories , mens kun categories som denne særlige bruger har abonneret på, vil have nogen information i user_category_subscriptions kolonner. Selvfølgelig alle andre categories vil blive udfyldt med null i user_category_subscriptions kolonner.
Omvendt en where klausulen gør join, og derefter reducerer rækkesættet. Så dette udfører alle joins og eliminerer derefter alle rækker, hvor user_id er ikke lig med 1 . Du står tilbage med en ineffektiv måde at få en inner join på .
Forhåbentlig hjælper dette!