Musisz umieścić go w join
klauzula, a nie 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
Zobacz, z inner join
, umieszczając klauzulę w join
lub where
jest równoważne. Jednak z outer join
, są one bardzo różne.
Jako join
warunek, określ zestaw wierszy, który będzie dołączany do tabeli. Oznacza to, że oblicza user_id = 1
najpierw i pobiera podzbiór user_category_subscriptions
z user_id
z 1
dołączyć do wszystkich wierszy w categories
. To da ci wszystkie wiersze w categories
, podczas gdy tylko categories
że ten konkretny użytkownik zasubskrybował, będzie miał wszelkie informacje w user_category_subscriptions
kolumny. Oczywiście wszystkie inne categories
zostanie wypełnione null
w user_category_subscriptions
kolumny.
I odwrotnie, where
klauzula łączy, a wtedy zmniejsza zestaw wierszy. W ten sposób wykonuje wszystkie połączenia, a następnie eliminuje wszystkie wiersze, w których user_id
nie równa się 1
. Pozostaje Ci niewydajny sposób na uzyskanie inner join
.
Mam nadzieję, że to pomoże!