Musíte to vložit do join
klauzule, nikoli 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
Vidíte, s inner join
, vložením klauzule do join
nebo where
je ekvivalentní. Nicméně s outer join
, jsou velmi odlišné.
Jako join
zadáte sadu řádků, kterou budete připojovat k tabulce. To znamená, že vyhodnotí user_id = 1
nejprve a přebírá podmnožinu user_category_subscriptions
s user_id
z 1
pro připojení ke všem řádkům v categories
. Tím získáte všechny řádky v categories
, zatímco pouze categories
že se tento konkrétní uživatel přihlásil k odběru, bude mít všechny informace v user_category_subscriptions
sloupců. Samozřejmě všechny ostatní categories
bude vyplněna null
v user_category_subscriptions
sloupce.
A naopak where
klauzule provede spojení a pak snižuje sadu řádků. To tedy provede všechna spojení a poté odstraní všechny řádky, kde je user_id
nerovná se 1
. Zbývá vám neefektivní způsob, jak získat inner join
.
Snad to pomůže!