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

MySQL join con clausola where

Devi inserirlo nel join clausola, non il 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

Vedi, con un inner join , inserendo una clausola nel join o il where è equivalente. Tuttavia, con un outer join , sono molto diversi.

Come join condizione, si specifica il set di righe che si unirà alla tabella. Ciò significa che valuta user_id = 1 prima, e prende il sottoinsieme di user_category_subscriptions con un user_id di 1 per unirti a tutte le righe in categories . Questo ti darà tutte le righe in categories , mentre solo le categories a cui questo particolare utente si è iscritto avrà tutte le informazioni in user_category_subscriptions colonne. Naturalmente, tutte le altre categories sarà popolato con null nella user_category_subscriptions colonne.

Al contrario, un where la clausola fa il join, e quindi riduce il set di righe. Quindi, questo esegue tutti i join e quindi elimina tutte le righe in cui user_id non è uguale a 1 . Ti rimane un modo inefficiente per ottenere un inner join .

Speriamo che questo aiuti!