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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  probleme de selection selon critere

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme de selection selon critere

n°1410125
$man
Posté le 20-07-2006 à 12:40:17  profilanswer
 

Bonjour,
 
j'ai un petit soucis pour batir une requete, voila le topo :
 

art  | nom
----------
XX   | a
XX   | b
XX   | c
YY   | t
YY   | u


 
J'ai mon article XX qui est composé de a,b et c. Mon YY de t et u.
 
Ensuite j'ai la table de reception des composants suivantes :

nom | prix
----------
a   | 50
c   | 34
t   | 12
u   | 15


 
En fait je voudrais faire une requete qui me selectionne les articles dont j'ai eut une reception pour chacun des composants. Dans mon exemple la requete renvoie YY car tous ses composants ont un prix mais pas XX car il manque le prix de b.
 
Merci d'avance.
 
:hello:


Message édité par $man le 20-07-2006 à 12:41:33
mood
Publicité
Posté le 20-07-2006 à 12:40:17  profilanswer
 

n°1410166
moonboot
Posté le 20-07-2006 à 13:53:50  profilanswer
 

a essayer, j'ai pas pu tester :
 

Code :
  1. select distinct a.art
  2. from articles a
  3. where a.art not in (select distinct recap.art
  4.              from
  5.           (select a.art, a.nom, r.nom
  6.              from articles a,
  7.              reception r
  8.            where a.nom = r.nom(+)) recap
  9.             where recap.nom is null)


 
ya surement moyen de faire plus joli mais c'est ce que j'ai trouvé en preum's


Message édité par moonboot le 20-07-2006 à 13:54:26
n°1412022
$man
Posté le 24-07-2006 à 09:13:14  profilanswer
 

Salut,
 
merci de ta réponse, que signifie le r.nom(+) ?
 
:hello:

n°1412029
Arjuna
Aircraft Ident.: F-MBSD
Posté le 24-07-2006 à 09:29:09  profilanswer
 

jointure ouverte (si pas de ligne, ça rammène une ligne avec "null" )

n°1412030
Arjuna
Aircraft Ident.: F-MBSD
Posté le 24-07-2006 à 09:32:36  profilanswer
 

moi je penserais plutôt à :
 

select t1.art, sum(1), sum(decode(t2.nom, null, 0, 1))
from t2, t1
where t2.nom(+) = t1.nom
having sum(1), sum(decode(t2.nom, null, 0, 1))


 
à vérifier aussi, mais ça devrait marcher, etun peu plus performant que la requête de moonboot


Message édité par Arjuna le 24-07-2006 à 09:33:02
n°1412047
$man
Posté le 24-07-2006 à 10:00:27  profilanswer
 

Salut,
 
ok, c'est comme un right outer join alors ?
 
Merci.

n°1412050
Arjuna
Aircraft Ident.: F-MBSD
Posté le 24-07-2006 à 10:06:44  profilanswer
 

oui

n°1412052
Arjuna
Aircraft Ident.: F-MBSD
Posté le 24-07-2006 à 10:08:27  profilanswer
 

la syntaxe (+) à côté d'un champ, c'est la syntaxe Oracle. Elle indique que c'est du côté du champ qu'il faut ajouter les lignes vides si la jointure ne se fait pas.
 
La syntaxe *= ou =*, c'est la syntaxe SQL Server. Elle indique qu'il y a plus de lignes du côte de l'étoile, c'est donc l'inverse d'Oracle (juste pour faire chier :D)

n°1412055
$man
Posté le 24-07-2006 à 10:10:06  profilanswer
 

Merci,
 
je vais me pencher sur le probleme, et je suis en SQL SRV donc decode il connait pas :)
 
:hello:

n°1412058
Arjuna
Aircraft Ident.: F-MBSD
Posté le 24-07-2006 à 10:11:56  profilanswer
 

utilise "case when" à la place un peu plus lourd... ou un if vu qu'on n'a que deux choix


Message édité par Arjuna le 24-07-2006 à 10:13:42
mood
Publicité
Posté le 24-07-2006 à 10:11:56  profilanswer
 

n°1412060
Arjuna
Aircraft Ident.: F-MBSD
Posté le 24-07-2006 à 10:13:16  profilanswer
 

Ca devrait donner un truc du style :
 


select t1.art, sum(1), sum(if t2.nom is null then 0 else 1 end if))  
from t2, t1  
where t2.nom =* t1.nom  
having sum(1), sum(decode(t2.nom, null, 0, 1))

n°1412081
moonboot
Posté le 24-07-2006 à 10:32:56  profilanswer
 

pas mal ton truc arjuna, connaissais pas cette astuce avec le sum(1), je vais tester chez moi, ca pourrait me servir !

n°1412088
Arjuna
Aircraft Ident.: F-MBSD
Posté le 24-07-2006 à 10:43:15  profilanswer
 

moonboot a écrit :

pas mal ton truc arjuna, connaissais pas cette astuce avec le sum(1), je vais tester chez moi, ca pourrait me servir !


j'espère que ça marche, je n'ai pas testé ;) mais dans l'approche ça doit être ok. j'ai juste un doute avec le having, j'arrive jamais à le faire marcher du premier coup ;)

n°1412090
Arjuna
Aircraft Ident.: F-MBSD
Posté le 24-07-2006 à 10:44:26  profilanswer
 

sinon, à la place du SUM() on peut essayer avec un COUNT() sans mettre le IF à l'intérieur. Si c'est bien foutu, il devrait rejeter les NULL, mais je suis très loin d'être sûr de moi sur ce coup ;)

n°1412324
orafrance
Posté le 24-07-2006 à 14:48:56  profilanswer
 

= plutôt que , dans le having ce serait mieux je pense :ange:

n°1412401
Arjuna
Aircraft Ident.: F-MBSD
Posté le 24-07-2006 à 15:57:47  profilanswer
 

ah ouais, copier coller malencontreux :D

n°1412402
$man
Posté le 24-07-2006 à 15:58:05  profilanswer
 

Salut,
 
Y'a des chances en effet.  
 
J'ai refais par moi meme la requete précédente , avec des JOIN, je suis plus familier avec.  
J'arrive à un résultat très similaire à ce qu'a indiqué moonboot, c'est plutôt bon signe.  
En combinant ce dernier poste avec mes précédents, je pense avoir réussi à faire mon truc.
Je vous remercie, c'est clairement grâce à votre aide :)
C'est la plus grosse requete que j'ai jamais fait pour l'instant :love: (:D) et ca me facilite bien la vie.
 
Merci :hello:


Message édité par $man le 24-07-2006 à 15:58:36
n°1412405
Arjuna
Aircraft Ident.: F-MBSD
Posté le 24-07-2006 à 16:00:38  profilanswer
 

tu verras quand tu feras des requêtes de 200 lignes, tu regretteras cette époque où tes problèmes étaient aussi simple que ça :D


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

  probleme de selection selon critere

 

Sujets relatifs
gros probleme de tableauProblème de dérivation d'un class abstraite
[VB6] Probleme de selected avec une file boxProbleme incompatibilite données acces/VBA [résolu]
probleme compilationprobleme xsl/javascript
probleme xsl/javascript[CSS] Problème incompréhensible d'alignement
probleme de video avec mozilla firefox 
Plus de sujets relatifs à : probleme de selection selon critere


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