MySQL sélectionnez rejoindre où ET où
J'ai deux tables dans ma base de données:
Produits
- id (int, clé primaire)
- nom (varchar)
ProductTags
- product_id (int)
- tag_id (int)
Je souhaite sélectionner les produits ayant toutes les étiquettes. J'ai essayé:
SELECT
*
FROM
Products
JOIN ProductTags ON Products.id = ProductTags.product_id
WHERE
ProductTags.tag_id IN (1, 2, 3)
GROUP BY
Products.id
Mais il me donne les produits ayant tout d'étiquettes, au lieu d'avoir toutes les étiquettes. Écrit WHERE tag_id = 1 AND tag_id = 2
est inutile, parce que pas de lignes sera retourné.
Je ne comprends pas ce que vous êtes après? Avez-vous des soins pour élaborer avec certains de données et d'exemples?
OriginalL'auteur Darrarski | 2011-02-16
Vous devez vous connecter pour publier un commentaire.
Ce type de problème est connu comme relationnel division
HAVING COUNT(DISTINCT ProductTags.tag_id) = 1
et de toute taille de balises id de tableau:WHERE ProductTags.tag_id IN (1,2,3,4)
Vous devez ajuster la
3
tant que de besoin. Pour(1,2,3,4)
vous devez utiliserHAVING COUNT(DISTINCT ProductTags.tag_id) = 4
sinon vous serait de ramener ceux qui avaient toutes les 3 balises de la 4.OriginalL'auteur Martin Smith
vous avez besoin d'avoir un groupe en /compter pour s'assurer que tous sont comptabilisés
OriginalL'auteur DRapp
MySQL
WHERE fieldname IN (1,2,3)
est essentiellement un raccourci pourWHERE fieldname = 1 OR fieldname = 2 OR fieldname = 3
. Donc, si vous n'obtenez pas la fonctionnalité désirée avecWHERE ... IN
puis essayer de passer à l'OR
s. Si cela ne vous donne pas les résultats que vous voulez, alors peut-êtreWHERE ... IN
n'est pas la fonction, vous devez utiliser.OriginalL'auteur WNRosenberg