J'ai deux tables que je veux rejoindre.
Je veux toutes les catégories du tableau des catégories ainsi que toutes les catégories auxquelles un utilisateur a souscrit dans le tableau category_subscriptions.
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 souhaite ajouter une clause where à la fin de la requête, ce qui en fait essentiellement une jointure interne / equi.
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 obtenir toutes les catégories ainsi que toutes les catégories auxquelles un utilisateur est abonné en utilisant une seule requête?
category_id étant une clé dans la table des catégories et dans les abonnements user_category_subscriptions. user_id résidant dans la table user_category_subscriptions.
Merci
mysql
join
where-clause
mmundiff
la source
la source
Réponses:
Vous devez le mettre dans la
join
clause, pas dans lewhere
:Voir, avec un
inner join
, mettre une clause dans lejoin
ou lewhere
est équivalent. Cependant, avec unouter join
, ils sont très différents.Comme
join
condition, vous spécifiez l'ensemble de lignes que vous joindrez à la table. Cela signifie qu'il évalue enuser_id = 1
premier et prend le sous-ensemble deuser_category_subscriptions
avec unuser_id
sur1
pour joindre toutes les lignes danscategories
. Cela vous donnera toutes les lignes danscategories
, tandis que seul celuicategories
auquel cet utilisateur particulier s'est abonné aura des informations dans lesuser_category_subscriptions
colonnes. Bien sûr, tous les autrescategories
seront renseignésnull
dans lesuser_category_subscriptions
colonnes.Inversement, une
where
clause effectue la jointure, puis réduit l'ensemble de lignes. Donc, cela fait toutes les jointures, puis élimine toutes les lignes oùuser_id
n'est pas égal1
. Il vous reste un moyen inefficace d'obtenir un fichierinner join
.Espérons que cela aide!
la source
A
etB
table? Pouvez-vous reformuler votre question?Essaye ça
la source