Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Join mit Where-Klausel

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!