Pb de requete SQL

Pb de requete SQL - SQL/NoSQL - Programmation

Marsh Posté le 21-05-2005 à 13:27:08    

Bonjour,
 
Voila j'aurai besoin d'un petit conseil pour une requete SQL j'ai une base de donnée remplie comme ca:
 
http://pierreetdecor.free.fr/TEST/TABLE%20TP.jpg
 
On me demande d'écrire la requete suivante:
 
Numéro et nom des clients ayant commandé tous les articles de couleur ‘rouge’.
 
J'arrive à trouver les clients qui on commandé au moins un article 'rouge':
 
 SELECT DISTINCT Cl.NoClient,Cl.nomClient FROM client AS Cl,détailCmde AS De,commande AS Co,article AS Ar WHERE Cl.NoClient=Co.NoClient AND De.NoCmde=Co.NoCmde AND Ar.NoArt=De.NoArt AND De.NoArt IN (SELECT NoArt FROM article WHERE Couleur = 'rouge')  
 
qui me donne:
 
NoClient  nomClient  
101         Dupond
102         Durand
103         Pierre
 
Mais je n'ai pas d'idée pour tous les articles'rouge'
 
Si qqu'un avait une idée...
 
 :whistle:

Reply

Marsh Posté le 21-05-2005 à 13:27:08   

Reply

Marsh Posté le 21-05-2005 à 13:33:04    

il faut prendre le probleme à l'envers.
 
Numéro et nom des clients ayant commandé au moins un article de couleur autre que rouge  :hello:
 
et ensuite tu prends le complément


Message édité par tomtom41 le 21-05-2005 à 13:33:22
Reply

Marsh Posté le 21-05-2005 à 13:37:05    

pour le complément SELECT * FROM table NOT IN ( SELECT * FROM...);

Reply

Marsh Posté le 21-05-2005 à 13:42:49    

Ca marchera pas, ça, ça va ressortir les clients ayant acheté que des articles rouges ... et pas ceux qui les ont tous achetés :)
 
Il faut compter le nombre d'articles distincts rouges, par client, et comparer au nombre total d'articles distincts rouges.
 

Code :
  1. SELECT Cl.NoClient, Cl.nomClient, COUNT(DISTINCT Ar.NoArt)
  2. FROM client AS Cl,
  3.      détailCmde AS De,
  4.      commande AS Co,
  5.      article AS Ar
  6. WHERE Cl.NoClient=Co.NoClient
  7. AND De.NoCmde=Co.NoCmde
  8. AND Ar.NoArt = De.NoArt
  9. AND De.Couleur = 'rouge'
  10. GROUP BY Cl.NoClient, Cl.nomClient
  11. HAVING COUNT(DISTINCT Ar.NoArt) =
  12.     (SELECT COUNT(NoArt) FROM article
  13.      WHERE Couleur = 'rouge');


Message édité par Beegee le 21-05-2005 à 13:46:55
Reply

Marsh Posté le 21-05-2005 à 14:15:57    

Beegee a écrit :

Ca marchera pas, ça, ça va ressortir les clients ayant acheté que des articles rouges ... et pas ceux qui les ont tous achetés :)
 
Il faut compter le nombre d'articles distincts rouges, par client, et comparer au nombre total d'articles distincts rouges.
 

Code :
  1. SELECT Cl.NoClient, Cl.nomClient, COUNT(DISTINCT Ar.NoArt)
  2. FROM client AS Cl,
  3.      détailCmde AS De,
  4.      commande AS Co,
  5.      article AS Ar
  6. WHERE Cl.NoClient=Co.NoClient
  7. AND De.NoCmde=Co.NoCmde
  8. AND Ar.NoArt = De.NoArt
  9. AND De.Couleur = 'rouge'
  10. GROUP BY Cl.NoClient, Cl.nomClient
  11. HAVING COUNT(DISTINCT Ar.NoArt) =
  12.     (SELECT COUNT(NoArt) FROM article
  13.      WHERE Couleur = 'rouge');



 
ah merde j'avais mal compris la question alors  :D  

Reply

Marsh Posté le 21-05-2005 à 15:30:36    

Vous etes trop fort!(comme à chaque fois)
Merci à tous pour vos reponses
J'vais pouvoir aller en we l'esprit tranquile ;-)
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed