[debutant] aide solution de requetes

aide solution de requetes [debutant] - SQL/NoSQL - Programmation

Marsh Posté le 31-03-2005 à 17:13:42    

salut tout le monde je debute en sql et j'ai fait quelques 50 requetes en exercices mais il me reste 4 que je n'ai pu trouver la solution si vous pouvez m'aider un peu en me donnant l'idée de l'ecriture de la requete ou un ptit code ressemblant Merci :
 
schema:
U(NU,NomU,Ville)
P(NP,NomP,Couleur,Poids)
F(NF,NomF,Statut,Ville)
PUF(#NP,#NU,#NF,Quantite)
 
Les requetes :
 
1)Donner les numeros des fournisseurs qui approvisionnent à la fois les usines N1 et N2
 
2)Donner les numeros des produits qui sont livrés à toutes les usines de Londres
 
3)Donner les numeros de fournisseurs qui approvisionnent toutes les usines avec un meme produit
 
voila les requete que j'ai ecrite et qui biensure ne donnent pas le resultat voulu :
 
1)

Code :
  1. SELECT nf FROM puf WHERE
  2. nu IN (1,2)
  3. GROUP BY nf
  4. HAVING COUNT(*) = 2 ;


 
2)

Code :
  1. select np from puf where
  2.   nu=all(select distinct nu from u where u.ville='Londres');


 
3) je n'ai pas trouvé par ou commencer  
 
Je travaille sous oracle 9i
 
Merci beaucoup de votres aide !!

Reply

Marsh Posté le 31-03-2005 à 17:13:42   

Reply

Marsh Posté le 01-04-2005 à 19:48:52    

Salut Mehdi,
je vais essayer de répondre à tes questions mais j'ai pas vraiment moyen de vérifier alors je te promets rien.
 
1)

Code :
  1. SELECT nf FROM puf WHERE
  2. nu IN (1,2)
  3. GROUP BY nf
  4. HAVING COUNT(*) = 2 ;


 
voila:

Code :
  1. SELECT nf
  2. FROM puf
  3. WHERE nu =ALL(1,2); --A condition que tes identifiants des usines N1 et N2 soient bien 1 et 2


 
2)

Code :
  1. select np from puf where
  2.   nu=all(select distinct nu from u where u.ville='Londres');


 
voila:

Code :
  1. SELECT DISTINCT np
  2. FROM puf
  3. WHERE nu IN(SELECT nu FROM u WHERE ville='Londres');


 
3)
 
et voila

Code :
  1. SELECT nf
  2. FROM puf
  3. HAVING COUNT(DISTINCT np)=1
  4. GROUP BY nf;


 
Alors pour la dernière, chui vraiment pas sur. Pas au niveau logique mais au niveau syntaxe, je sais pas si on peut mettre distinct ds un count.
Je reviendrai te donner confirmation

Reply

Marsh Posté le 02-04-2005 à 02:40:38    

merci beaucoup il est un peu tard pour verifier tous ca  :sleep:  2m1 matin alors ;)  
en regardant bien si tu peux m'expliquer comment ta eu l'idee parce que pour la 1ere t'a utilisé all donc le fournisseur ne va approvisionné que les usines 1 et 2 et s'il approvisionnait d'autres à part 1 et 2 ca ne vas pas marcher je crois !!! ???
pour la deuxieme

Code :
  1. WHERE nu IN(SELECT nu FROM u WHERE ville='Londres');


ca ne veut pas dire au moins une usine de londres ca ??  
pour la derniere elle est ou la contrainte toutes les usines avec un meme produit  :??: ???
 
encore merci !!! A+  


Message édité par mehdi_tn le 02-04-2005 à 02:53:45
Reply

Marsh Posté le 02-04-2005 à 08:52:56    

1)Donner les numeros des fournisseurs qui approvisionnent à la fois les usines N1 et N2 :
 

Code :
  1. SELECT distinct puf1.nf
  2. FROM puf puf1, puf puf2
  3. WHERE puf1.nu = 1
  4. AND puf2.nu = 2
  5. AND puf1.nf = puf2.nf;


 
2)Donner les numeros des produits qui sont livrés à toutes les usines de Londres :
 

Code :
  1. select np, count(distinct nu)
  2. from puf
  3. group by np
  4. having count(distinct nu) = (select count(distinct nu) from u);


 
3)Donner les numeros de fournisseurs qui approvisionnent toutes les usines avec un meme produit :
 

Code :
  1. select distinct nf from (
  2. select nf, np, count(distinct nu)
  3. from puf
  4. group by nf, np
  5. having count(distinct nu) = (select count(distinct nu) from u)
  6. );


Message édité par Beegee le 02-04-2005 à 08:53:54
Reply

Marsh Posté le 02-04-2005 à 12:27:07    

Merci Beegee de ta reponse , La requete 1 et 3 fonctionnent impec, tres bonne idee d'utiliser les count je n'y avait pas pensé, mais la 2eme ne marche pas de ja il manque where ville='Londres' dans la 2eme clause select mais ca ne marche pas com meme  :??:  
 
merci encore

Reply

Marsh Posté le 02-04-2005 à 13:17:56    

Pour la 2) :
 

Code :
  1. select puf.np, count(distinct puf.nu)
  2. from puf, u
  3. where puf.nu = u.nu
  4. and u.ville = 'LONDRES'
  5. group by np
  6. having count(distinct nu) = (select count(distinct nu) from u where ville = 'LONDRES');

Reply

Marsh Posté le 02-04-2005 à 16:00:40    

merci beucoup c'est une tres bonne taktik ce count je vais l'utiliser plus souvent

Reply

Sujets relatifs:

Leave a Replay

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