Exemple:MySQL GROUP_CONCAT + IN() = données manquantes :-(
Tableau: Boîte
boxID color
01 red
02 blue
03 green
Tableau: boxHas
boxID has
01 apple
01 pear
01 grapes
01 banana
02 lime
02 apple
02 pear
03 chihuahua
03 nachos
03 baby crocodile
Je veux interroger sur le contenu de chaque boîte, et retourne une table avec chaque ID, couleur, et une colonne qui concatène le contenu de chaque boîte, donc j'utilise:
SELECT box.boxID, box.color,
GROUP_CONCAT(DISTINCT boxHas.has SEPARATOR ", ") AS contents
FROM box
LEFT JOIN boxHas ON box.boxID=boxHas.boxID
WHERE boxHas.has IN ('apple','pear')
GROUP BY box.boxID
ORDER BY box.boxID
et je reçois le tableau suivant des résultats:
boxID color contents
01 red apple, pear
02 blue apple, pear
Ma question est: pourquoi ne pas énumérer toutes les valeurs has
dans la colonne contents
? Pourquoi mon instruction WHERE
recadre-t-elle également mon GROUP_CONCAT
?
Le tableau que je pensais que j'allais faire est:
boxID color contents
01 red apple, banana, grapes, pear
02 blue apple, lime, pear
Bien que je veux limiter mes boxID
résultats en fonction de la déclaration WHERE
, je ne pas veulent limiter le champ contents
pour les boîtes valides . : -/
Aide?
C'est ce que je avais besoin. Peut -HAVING- être utilisé avec -WHERE- dans la même requête? – Drew
Oui, ils peuvent être utilisés en même temps, il suffit de garder à l'esprit que WHERE est le premier filtre pour chaque ligne, et HAVING est le deuxième filtre qui agit sur vos données agrégées (groupées) –
Merci encore. C'était la dernière pièce manquante dans une requête personnalisée massive! :-) – Drew