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!