# \[Résolu\]\[SQL\] Pas de retour si count = 0

**URL:** <https://www.debian-fr.org/t/resolu-sql-pas-de-retour-si-count-0/15673>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 6:12 UTC](https://www.debian-fr.org/t/resolu-sql-pas-de-retour-si-count-0/15673 "2016-02-20T18:12:25Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Opera140](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/o/9d8465/32.png) [@Opera140](https://www.debian-fr.org/u/Opera140)\
**Post date:** [Février 20, 2016, 6:12 UTC](https://www.debian-fr.org/t/resolu-sql-pas-de-retour-si-count-0/15673/1 "2016-02-20T18:12:25Z")

</div>

Bonjour,

J’ai un problème avec l’une de mes requêtes :

[quote]SELECT [c.id](http://c.id),email,count(r.idCampagne)  
FROM contact c  
LEFT JOIN recevoir r ON ([c.id](http://c.id) = r.idContact)  
LEFT JOIN campagne ca ON (r.idCampagne = [ca.id](http://ca.id))  
WHERE ca.dateEnvoi BETWEEN ‘2006-06-01’ AND '2006-06-30’  
GROUP BY id HAVING count(r.idCampagne) \<10  
ORDER BY 3;[/quote]

Lorsque j’exécute cette requête, elle ne me renvoie pas les résultats où le count est égal à 0.

Or, si j’exécute cette requête :

> [@](#):
>
> SELECT count(idCampagne) FROM recevoir LEFT JOIN campagne ON (campagne.id=recevoir.idCampagne) WHERE dateEnvoi BETWEEN ‘2006-06-01’ AND ‘2006-06-30’ AND idContact = 1214

Elle me renvoie bien 0.

Je ne comprends pas pourquoi le résultat de la deuxième requête n’est pas dans la première.

---

<div class="post-metadata">

**Author:** ![Hoshin](https://www.debian-fr.org/user_avatar/www.debian-fr.org/hoshin/32/3672_2.png) [@Hoshin](https://www.debian-fr.org/u/Hoshin)\
**Post date:** [Février 20, 2016, 6:12 UTC](https://www.debian-fr.org/t/resolu-sql-pas-de-retour-si-count-0/15673/2 "2016-02-20T18:12:36Z")

</div>

Tu utilises un HAVING dans la requete 1 et pas dans la 2 pour faire tes tris, essaye voir dans la 2 si tu utilises “HAVING idContact = 1214” si cela te renvoie toujours le résultat attendu ou pas, je serais tenté de dire qu’il faudrait utiliser ta requête 2 puis, au lieu de mettre un “AND bla=xxxx” d’utiliser quelque-chose comme : "AND monIdQueJeVeux IN ".

M’enfin bon c’est pas hyper digeste à lire le matin avec le premier café tout ça…

---

<div class="post-metadata">

**Author:** ![debianhadic](https://www.debian-fr.org/user_avatar/www.debian-fr.org/debianhadic/32/3870_2.png) [@debianhadic](https://www.debian-fr.org/u/debianhadic)\
**Post date:** [Février 20, 2016, 6:12 UTC](https://www.debian-fr.org/t/resolu-sql-pas-de-retour-si-count-0/15673/3 "2016-02-20T18:12:37Z")

</div>

[quote=“Opera140”]  
ORDER BY 3;[/quote]

A quoi ça sert ça ?

---

<div class="post-metadata">

**Author:** ![Opera140](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/o/9d8465/32.png) [@Opera140](https://www.debian-fr.org/u/Opera140)\
**Post date:** [Février 20, 2016, 6:12 UTC](https://www.debian-fr.org/t/resolu-sql-pas-de-retour-si-count-0/15673/4 "2016-02-20T18:12:38Z")

</div>

Ca sert à avoir ceux qui ont le moins de campagne en sommet de liste.

Sinon c’est résolu 🙂

La bonne requête est :

[quote]SELECT [contact.id](http://contact.id),email,count([mesCampagnes.id](http://mesCampagnes.id)) FROM contact  
LEFT JOIN recevoir ON ([contact.id](http://contact.id) = recevoir.idContact)  
LEFT JOIN (SELECT id FROM campagne WHERE dateEnvoi BETWEEN ‘2006-06-01’ AND ‘2006-06-30’) mesCampagnes ON (mesCampagnes.id=recevoir.idCampagne)  
GROUP BY idContact HAVING count([mesCampagnes.id](http://mesCampagnes.id)) \<10  
ORDER BY 3;[/quote]
