Sie müssen es in join
einfügen -Klausel, nicht das 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
Siehe, mit einem inner join
, indem Sie eine Klausel in join
einfügen oder das where
ist gleichwertig. Allerdings mit einem outer join
, sie sind sehr unterschiedlich.
Als join
Bedingung geben Sie das Rowset an, das Sie mit der Tabelle verknüpfen möchten. Das bedeutet, dass es user_id = 1
auswertet zuerst und nimmt die Teilmenge von user_category_subscriptions
mit einer user_id
von 1
um alle Zeilen in categories
zu verbinden . Dadurch erhalten Sie alle Zeilen in categories
, während nur die categories
die dieser bestimmte Benutzer abonniert hat, enthält alle Informationen in user_category_subscriptions
Säulen. Natürlich auch alle anderen categories
wird mit null
gefüllt in den user_category_subscriptions
Spalten.
Umgekehrt ein where
-Klausel führt den Join aus, und then reduziert das Rowset. Dies führt also alle Verknüpfungen durch und eliminiert dann alle Zeilen, in denen user_id
ist nicht gleich 1
. Sie haben nur noch einen ineffizienten Weg, um einen inner join
zu erhalten .
Hoffentlich hilft das!