sql >> Database teknologi >  >> RDS >> Mysql

MySQL join med where-klausul

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!



  1. 3 måder at returnere Modulo i MariaDB

  2. CAST og IsNumeric

  3. hvordan tildeler man brugerrettigheder på et specifikt skema?

  4. Nulstil automatisk stigningstæller i postgres