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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL - ORACLE] Requete un peu complexe (pour moi)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL - ORACLE] Requete un peu complexe (pour moi)

n°1233173
Worldofdad​a
Posté le 28-10-2005 à 09:25:03  profilanswer
 

Bonjour,
 
Je dois écrire une requete qui relie 4 tables et j'ai un petit soucis.
Pour vous expliquer, je ne vais prendre que 2 tables en espérant pouvoir l'adapter plus tard à mon système des 4 tables.
 
Les 2 tables sont donc :
CARACT_TITRE et CARACT_VALEUR
 
La clé primaire de ces deux tables est composée de : ID_equipement et Ordre_affichage.
Je dois pouvoir récupérer, dans une meme ligne, le titre et la valeur.
Jusque là, pas de problèmes.
 
Il n'y a pas d'enregistrement pour la valeur si elle est nulle mais je dois quand meme pouvoir récupérer la valeur. J'ai pu obtenir le bon résultat en utilisant une jointure externe.
Mon problème est que ce fonctionnement est également vrai dans l'autre sens. C'est à dire qu'il peut y avoir une valeur sans titre associé s'il n'est pas défini.
 
Et là, je ne sais plus faire.
Je ne sais pas comment faire pour afficher, dans l'ordre Ordre_affichage, tous les titres qu'ils aient une valeur ou non et toutes les valeurs qu'ils aient un titre ou non.
 
J'ai pas mal cherché de mon coté mais pas pu utilisé google car je ne vois meme pas quels mots clé je pourrais donner.
 
Quelqu'un a t'il déjà été confronté a ce problème et / ou quelqu'un a t'il une piste pour m'aider un petit peu ?
 
Merci beaucoup
Worldofdada

mood
Publicité
Posté le 28-10-2005 à 09:25:03  profilanswer
 

n°1233178
skeye
Posté le 28-10-2005 à 09:42:17  profilanswer
 

bah si, c'est une jointure externe complete, et pas seulement gauche ou droite, que tu veux, non? (full outer join)


---------------
Can't buy what I want because it's free -
n°1233182
Worldofdad​a
Posté le 28-10-2005 à 09:44:21  profilanswer
 

Ben c'est ce que je me suis dit également mais je n'ai pas réussi avec mes 4 tables.
 
Et c'est pour au final etre mis dans du Crystal Report ...
 
Je vais re-tenter cette solution   ;o)

n°1233539
Worldofdad​a
Posté le 28-10-2005 à 14:52:25  profilanswer
 

C'est possible de faire un full outer join sur plusieurs tables ?
 
Je m'explique avec le schéma ci dessous :
http://img369.imageshack.us/my.php?image=tmp6gn.jpg
 
Je n'ai malhreusement pas la possibilité de modifier le schéma de données.
Seul le lien du bas n'existe pas. Je l'ai mis car je dois m'en servir pour ma requete pour éviter d'avoir le produit cartésien des enregistrements : le titre 1 doit aller avec la valeur 1 et pas avec toutes les valeurs.
 
Mon soucis est que si je fais un full outer join entre EQP_ATTRIBUTS et ATTRIBUTS, le résultat est le meme.
Et je ne sais pas comment faire pour réaliser les outer joins sur plusieurs tables.
 
Quelqu'un a une petite idée ?
 
Merci beaucoup.


Message édité par Worldofdada le 28-10-2005 à 14:53:37
n°1233549
Worldofdad​a
Posté le 28-10-2005 à 15:00:07  profilanswer
 

Pour ceux qui veulent plus de détails :
 
http://img462.imageshack.us/my.php?image=tmp28kk.jpg
 
Je tente des trucs mais soit j'ai 75 000 résultats, soit 30 alors que je devrais en avoir une cinquantaire   :(


Message édité par Worldofdada le 28-10-2005 à 15:00:42
n°1233591
Worldofdad​a
Posté le 28-10-2005 à 15:28:08  profilanswer
 

En réfléchissant un peu plus, je ne crois pas que je soit obligé de faire des outer join sur plusieurs tables étant donné que c'est juste le lien Ordre d'affichage qui pose problème.
 
Personne ne pourrait m'aider SVP ??

n°1233651
olivthill
Posté le 28-10-2005 à 16:05:22  profilanswer
 

Citation :

Il n'y a pas d'enregistrement pour la valeur si elle est nulle mais je dois quand meme pouvoir récupérer la valeur. J'ai pu obtenir le bon résultat en utilisant une jointure externe.  
Mon problème est que ce fonctionnement est également vrai dans l'autre sens. C'est à dire qu'il peut y avoir une valeur sans titre associé s'il n'est pas défini.

Dans ce cas, il faut utiliser deux jointures externes, une pour chaque sens, et additionner les résultats avec une Union.
Pour un exemple, voir ma réponse à une question similaire à http://www.codeguru.com/forum/showthread.php?t=358783 .

n°1233669
Worldofdad​a
Posté le 28-10-2005 à 16:29:56  profilanswer
 

Mon soucis est qu'au final je dois l'utiliser dans Crystal Report.
 
Je viens d'essayer sous Toad et ca ne marche quand meme pas ... pourtant, j'ai bien repris l'exemple donné (avec des where en plus)

n°1233671
Worldofdad​a
Posté le 28-10-2005 à 16:33:44  profilanswer
 

En fait, si je ne met pas de left/right/full join, ca me renvoi le produit cartésien des résultats.
 
Si je met left/right/full join avec le ON sur mon champ INDX (ordre d'affichage), ca me renvoi toujours la meme liste : la meme que si je met INDX = INDX en clause Where ...
 
snif

n°1233760
Beegee
Posté le 28-10-2005 à 17:34:30  profilanswer
 

Fournis-nous un script qui crée les tables et données (tu peux le faire sous Toad), pas nécessairement toutes les données, juste assez pour l'exemple.
 
Si tu fais ce petit exemple, tu devrais voir ce que ça donne (très basique ;) ) :
 

Code :
  1. DROP TABLE tableA;
  2. DROP TABLE tableB;
  3. DROP TABLE tableC;
  4. CREATE TABLE tableA
  5. (ID NUMBER(9),
  6. VALUE VARCHAR2(10));
  7. INSERT INTO tableA
  8. VALUES (1, 'A');
  9. INSERT INTO tableA
  10. VALUES (3, 'B');
  11. INSERT INTO tableA
  12. VALUES (4, 'C');
  13. INSERT INTO tableA
  14. VALUES (6, 'D');
  15. INSERT INTO tableA
  16. VALUES (7, 'E');
  17. INSERT INTO tableA
  18. VALUES (9, 'F');
  19. CREATE TABLE tableB
  20. (ID NUMBER(9),
  21. VALUE VARCHAR2(10));
  22. INSERT INTO tableB
  23. VALUES (1, 'G');
  24. INSERT INTO tableB
  25. VALUES (2, 'H');
  26. INSERT INTO tableB
  27. VALUES (3, 'I');
  28. INSERT INTO tableB
  29. VALUES (6, 'J');
  30. CREATE TABLE tableC
  31. (ID NUMBER(9),
  32. VALUE VARCHAR2(10));
  33. INSERT INTO tableC
  34. VALUES (1, 'J');
  35. INSERT INTO tableC
  36. VALUES (2, 'K');
  37. INSERT INTO tableC
  38. VALUES (8, 'L');
  39. SELECT * FROM tableA;
  40. SELECT * FROM tableB;
  41. SELECT * FROM tableC;
  42. SELECT *
  43. FROM tableA
  44. FULL OUTER JOIN tableB ON tableB.ID = tableA.ID
  45. FULL OUTER JOIN tableC ON tableC.ID = tableA.ID;


 
edit : ton problème est juste sur l'ordre d'affichage des résultats ? Dans ce cas, donne les règles d'affichage.


Message édité par Beegee le 28-10-2005 à 17:35:38

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

  [SQL - ORACLE] Requete un peu complexe (pour moi)

 

Sujets relatifs
[SQL] pb de selection...Comment faire cette requête SQL avec des combinaisons
Probléme avec une requete[SQL*PLUS] Probleme avec caractere special & dans requete SQL
Une procédure PL/SQL continue a tourné malgré l'arret de SQL plusPb de requete sql avec mysql
[ASP - Sql Server 2000] Défi pour trouver une requête complexe 
Plus de sujets relatifs à : [SQL - ORACLE] Requete un peu complexe (pour moi)


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