sql >> Database >  >> RDS >> Mysql

MySQL join met where-clausule

Je moet het in de join . zetten clausule, niet de 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

Kijk, met een inner join , een clausule in de join . plaatsen of de where gelijkwaardig is. Echter, met een outer join , ze zijn enorm verschillend.

Als een join voorwaarde, geeft u de rijenset op die u aan de tabel wilt toevoegen. Dit betekent dat het user_id = 1 . evalueert eerst, en neemt de subset van user_category_subscriptions met een user_id van 1 om lid te worden van alle rijen in categories . Dit geeft je alle rijen in categories , terwijl alleen de categories waarop deze specifieke gebruiker zich heeft geabonneerd, heeft alle informatie in de user_category_subscriptions kolommen. Natuurlijk, alle andere categories wordt gevuld met null in de user_category_subscriptions kolommen.

Omgekeerd, een where clausule doet de join, en dan vermindert de rijenset. Dit doet dus alle joins en elimineert vervolgens alle rijen waar user_id is niet gelijk aan 1 . Je hebt een inefficiënte manier om een ​​inner join te krijgen .

Hopelijk helpt dit!



  1. Lees-/schrijflatentie bewaken

  2. Oracle CREATE TABLE Commando in PL/SQL met 10 voorbeelden

  3. Gegevens opmaken in Power BI Desktop-visualisaties

  4. Paginering met MySQL LIMIT, OFFSET