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!