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!