MySQL jointure avec la clause where
J'ai deux tables j'ai envie de vous rejoindre.
Je veux toutes les catégories dans les catégories table et aussi de toutes les catégories souscrit par un utilisateur dans le category_subscriptions table.
essentiellement c'est ma requête jusqu'à présent:
SELECT *
FROM categories
LEFT JOIN user_category_subscriptions
ON user_category_subscriptions.category_id = categories.category_id
Cela fonctionne bien mais je tiens à ajouter une clause where sur la fin de la requête, qui alors en fait essentiellement un intérieur/equi-jointure.
SELECT *
FROM categories
LEFT JOIN user_category_subscriptions
ON user_category_subscriptions.category_id = categories.category_id
WHERE user_category_subscriptions.user_id = 1
Comment puis-je obtenir toutes les catégories ainsi que toutes les catégories souscrit par un utilisateur particulier à l'aide d'une seule requête?
category_id clé dans les deux catégories de table et user_category_subscriptions. user_id résidant dans le user_category_subscriptions table.
grâce
- Je crois qu'il s'appelle "le Droit de la Rejoindre", si je ne me trompe pas?
- vous avez sûrement trompé 🙂
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de le mettre dans le
join
clause, pas lawhere
:Voir, avec un
inner join
, de mettre une clause dans lejoin
ou lawhere
est équivalent. Cependant, avec unouter join
, ils sont très différents.Comme un
join
condition, vous devez spécifier l'ensemble de lignes que vous vous joindrez à la table. Cela signifie qu'il évalueuser_id = 1
en premier et prend le sous-ensemble deuser_category_subscriptions
avec unuser_id
de1
à se joindre à toutes les lignes danscategories
. Cela vous donnera toutes les lignes danscategories
, tandis que lacategories
que cet utilisateur a souscrit à la volonté de toute l'information dans leuser_category_subscriptions
colonnes. Bien sûr, tous les autrescategories
sera remplie avecnull
dans leuser_category_subscriptions
colonnes.À l'inverse, un
where
clause de le rejoindre, et puis réduit l'ensemble de lignes. Donc, ce n'toutes les jointures, puis élimine toutes les lignes oùuser_id
n'est pas égal à1
. Vous êtes de gauche avec un moyen inefficace pour obtenir uninner join
.Espérons que cette aide!
A
etB
table ? Pouvez-vous reformuler votre question ?Essayer cette