Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1171 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  sql requete aide please

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

sql requete aide please

n°577607
bird80
Posté le 27-11-2003 à 16:34:30  profilanswer
 

j'ai deux tables :
A et B
 
A
ID_A clé primaire
LIB_A
 
B
ID_1 clé primaire
ID_2 clé primaire
VAL
ID_A
 
Ce qu'il me faut c'est trouver pour chacune des combinaisons ID_1,ID_2 la valeur minimum de VAL et le LIB de du ID_A associé.
 
la requete suivante fait le resultat escompté sauf que je n'ai pas le Lib_A
 
select B.ID_1, B.ID_2, min(B.VAL)
from B
GROUP BY B.ID_1,B.ID_2
;
 
Le problème c'est que je n'ai pas le libellé meme si le resultat est parfait
 
select B.ID_1, B.ID_2, min(B.VAL),A.LIB_A
from B,A
Where B.ID_A=A.ID_A
GROUP BY B.ID_1,B.ID_2,A.LIB_A
;
 
le problème c'est que je n'est pas besoin de  A.LIB_A dans le groupe by comment faire sans.
 
il me faut les enregistrement de la première requete avec les champs B.ID_1,B.ID_2 et A.LIB_A
 
A l'aide
je sais ce n'est pas tres compréhensible mais ca ne doit pas être dur!!

mood
Publicité
Posté le 27-11-2003 à 16:34:30  profilanswer
 

n°577617
Mara's dad
Yes I can !
Posté le 27-11-2003 à 16:50:41  profilanswer
 

?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
Quelle Base
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????????????


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°577626
bird80
Posté le 27-11-2003 à 17:04:28  profilanswer
 

ca va solutionner mon probleme une reponse comme ca

n°577638
Mara's dad
Yes I can !
Posté le 27-11-2003 à 17:14:37  profilanswer
 

Si tu me dis ORACLE, j'ai une solution toute simple !
Si tu me dis MySql 3.x, c'est pas possible en une seule requête.
 
Je vais pas me faire chier à pondre une requête que tu ne pourras pas utiliser !
 
En GROS :
 
Merci de poser des questions en précisant le contexte !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°577644
bird80
Posté le 27-11-2003 à 17:24:13  profilanswer
 

ok c'est du oracle 8.1.x
prg php 4.2.x drivers jdbc

n°577656
ratibus
Posté le 27-11-2003 à 17:40:02  profilanswer
 

ID_1 clé primaire
ID_2 clé primaire
 
 
et tu veux le minimum pour chacun des couples ID_1, ID_2 ?
 
Etant donné que un couple ID_1, ID_2 est une clé primaire, t'auras toujours qu'un enregistrement associé à ce couple donc le minimum est pas difficile à trouver, c'est LA valeur pour ce couple.
 
Ou alors tu t'es trompé dans ta description des champs

n°577669
bird80
Posté le 27-11-2003 à 17:57:10  profilanswer
 

c'est vrai que c'est un peu plus compliqué que ca  
mais ID_A n'est pas clé primaire et donc par conséquant on peut avoir ca :
 
table B
 
ID_1  | ID_2  | VAL  | ID_A  | Autres champs
------|-------|------|-------|---------
  1   |   2   |  34  |  12   |
------|-------|------|-------|---------
  1   |   3   |  12  |   5   |
------|-------|------|-------|---------
  2   |   1   |  1   |   4   |
------|-------|------|-------|---------
  2   |   2   |   15 |   5   |
 
table A
 
id_a  | lib_a |
------|-------|
12    | balba |
5     | labao |
4     |  abj  |
 
réponse à la requete recherchée :
 
id_1    id_2   lib_a
-----|-------|--------
1       3      labao
2       1      abj

n°577698
Mara's dad
Yes I can !
Posté le 27-11-2003 à 18:28:22  profilanswer
 

select
 B.ID_1,
 B.ID_2,
 B.VAL,
 A.LIB_A
from
 B,A
Where
 B.ID_A=A.ID_A
 and TO_CHAR( B.ID_1 ) || '_' || TO_CHAR( B1.ID_1 ) IN
 (
  select
   TO_CHAR( B.ID_1 ) || '_' || TO_CHAR( B1.ID_1 ),
   min(B.VAL)
  from
   B
  GROUP BY
  TO_CHAR( B.ID_1 ) || '_' || TO_CHAR( B1.ID_1 )
 )
;


 
Impossible en MySql 3.X !
Mais possible avec Oracle :D


Message édité par Mara's dad le 27-11-2003 à 18:29:54

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°577709
bird80
Posté le 27-11-2003 à 19:07:44  profilanswer
 

je vais tester ca demain, mais si ca marche j'avoue que t'y connais drolement :)

n°578084
bird80
Posté le 28-11-2003 à 10:34:45  profilanswer
 

ca ne marche pas :(
parce que lorsque IN est utilisé on ne peut pas faire un select sur plusieurs champs!
mais c'est bon j'ai trouvé :)
 
select
 B.ID_1,
 B.ID_2,
 B.VAL,
 A.LIB_A
from
 B,A
Where
 B.ID_A=A.ID_A
and B.VAL = (select min(B1.val) from B1 (instance de B)
where B1.id_1=B.id and B1.id_2=B.id_2)
;
 
et ca marche :)

mood
Publicité
Posté le 28-11-2003 à 10:34:45  profilanswer
 

n°578135
Mara's dad
Yes I can !
Posté le 28-11-2003 à 11:25:28  profilanswer
 

Bon, y'a bien des bugs dans ma requête, mais y'a des problèmes :
Tu cherche le mini de VAL, mais pour B.ID_1, pas pour le couple ID_1 et ID_2. Sinon çà ne vaux rien dire puisque ID_1 + ID_2 est la cléf primaire... Donc pour chaque couple t'as qu'une seule valeur de VAL...
 
Ta requête :

select  
B.ID_1,  
B.ID_2,  
B.VAL,  
A.LIB_A  
from  
B,A  
Where  
B.ID_A=A.ID_A  
and B.VAL = (select min(B1.val) from B1 (instance de B)  
where B1.id_1=B.id and B1.id_2=B.id_2)  
;


 
Ne marche pas !
Corrigée comme çà :  

select
 B.ID_1,
 B.ID_2,
 B.VAL,
 A.LIB_A
from
 B,A
Where
 B.ID_A=A.ID_A
and B.VAL = (select min(B1.val) from B B1
where B1.id_1=B.id_1 and B1.id_2=B.id_2);


Le résultat est :

ID_1 ID_2 VAL LIB_A
1 2 34 balba
1 3 12 labao
2 1 1 abj
2 2 15 labao


 
En fait pour chaque ID_1, tu cherche le ID_2 qui a le val le plus petit.
 
En fait ce que tu veux c'est :

select
 B.ID_1,
 B.ID_2,
 B.VAL,
 A.LIB_A
from
 B,
 A
Where
 B.ID_A=A.ID_A
 and B.VAL =
 (
  select
   min(B1.val)
  from
   B B1
  where
   B1.id_1=B.id_1
 );


 
Qui donne bien :

ID_1 ID_2 VAL LIB_A
1 3 12 labao
2 1 1 abj


 
A+


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°578163
bird80
Posté le 28-11-2003 à 11:43:39  profilanswer
 

oui c'est vrai qu'il ya d'autre champs.
effectivement dans ma requête il y avait un _1 d'oublié :)
Mais c'est bon c'est bien ce que je recherche.
 
encore merci


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  sql requete aide please

 

Sujets relatifs
[oracle 8i] Dump de BdD avec "exp" marche pôs, help pleaseRequete NOT IN
aider mon pour ma requete Sql svpprobleme avec une requete de type update en ASP
aide sur les délimiteur de fichier sous accessrafraichissement d'un tableau dynamique a l'aide de boutons
requete SQL lister les users d'un groupeProblème requête
- Aide pour script regexp -Probleme requete
Plus de sujets relatifs à : sql requete aide please


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR