aide sur une requete

5 réponses
Avatar
val
Bonjour,

Pour connaître tous les clients ayant commandé en 2012 je fais :

select distinct comptesClients from VENTES where date like "2012%";

Je peux faire la même requête pour 2011 par exemple mais ce que
j'aimerais ce serait de trouver la liste des clients ayant commandé en
2011 mais pas en 2012.

Voyez-vous comment je pourrais construire ça ?

Merci pour votre temps.

5 réponses

Avatar
Patrick V
Le 10/01/2013 15:41, val a écrit :
Pour connaître tous les clients ayant commandé en 2012 je fais :

select distinct comptesClients from VENTES where date like "2012%";

Je peux faire la même requête pour 2011 par exemple mais ce que
j'aimerais ce serait de trouver la liste des clients ayant commandé en
2011 mais pas en 2012.



select distinct comptesClients from VENTES where date like "2011%"
and not exists (select 1 from VENTES where date like "2012%");
Avatar
Une Bévue
Le 10/01/13 16:07, Patrick V a écrit :
select distinct comptesClients from VENTES where date like "2011%"
and not exists (select 1 from VENTES where date like "2012%");



ça veut dire quoi exactement le "select 1" dans ce cas ?

--
L'homme est imparfait, mais ce n'est pas étonnant
quand on pense à l'époque où il a été créé.
— Alphonse Allais
Avatar
Alain Montfranc
Une Bévue a écrit :
Le 10/01/13 16:07, Patrick V a écrit :
select distinct comptesClients from VENTES where date like "2011%"
and not exists (select 1 from VENTES where date like "2012%");



ça veut dire quoi exactement le "select 1" dans ce cas ?



Ca renvoie 1 à chaque fois que la where clause est vérifiée
Inutile de renvoyer une vraie valeur puisque le seul but est de
vérifier l'existence d'au moins une ligne
Avatar
val
Patrick V a exposé le 10/01/2013 :
Le 10/01/2013 15:41, val a écrit :
Pour connaître tous les clients ayant commandé en 2012 je fais :

select distinct comptesClients from VENTES where date like "2012%";

Je peux faire la même requête pour 2011 par exemple mais ce que
j'aimerais ce serait de trouver la liste des clients ayant commandé en
2011 mais pas en 2012.



select distinct comptesClients from VENTES where date like "2011%"
and not exists (select 1 from VENTES where date like "2012%");



Je ne connaissais pas cet opérateur 'exists' et je crois qu'il va
m'être très utile à l'avenir. J'ai juste un peu changé la requête pour
obtenir ce que je voulais :

select distinct comptes as cpt from VENTES where date like "2011%" and
not exists (select 1 from VENTES where date like "2012%" and
compte=cpt);

Merci beaucoup !
Avatar
Une Bévue
Le 10/01/13 17:57, Alain Montfranc a écrit :
Ca renvoie 1 à chaque fois que la where clause est vérifiée
Inutile de renvoyer une vraie valeur puisque le seul but est de vérifier
l'existence d'au moins une ligne



ok, pigé, merci bien.

--
L'homme est imparfait, mais ce n'est pas étonnant
quand on pense à l'époque où il a été créé.
— Alphonse Allais