Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL joint avec la clause where

Vous devez le mettre dans le join clause, pas la 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

Voir, avec une inner join , en mettant une clause dans le join ou le where est équivalent. Cependant, avec une outer join , ils sont très différents.

En tant que join condition, vous spécifiez l'ensemble de lignes que vous allez joindre à la table. Cela signifie qu'il évalue user_id = 1 d'abord, et prend le sous-ensemble de user_category_subscriptions avec un user_id de 1 pour joindre toutes les lignes des categories . Cela vous donnera toutes les lignes dans categories , alors que seules les categories auquel cet utilisateur particulier s'est abonné aura des informations dans le user_category_subscriptions Colonnes. Bien sûr, toutes les autres categories sera rempli avec null dans les user_category_subscriptions colonnes.

Inversement, un where la clause fait la jointure, et alors réduit l'ensemble de lignes. Donc, cela fait toutes les jointures, puis élimine toutes les lignes où user_id n'est pas égal à 1 . Il vous reste un moyen inefficace d'obtenir une inner join .

J'espère que cela vous aidera !