IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Rendre une requête select, join, union plus jolie !


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut Rendre une requête select, join, union plus jolie !
    Bonjour,

    j'ai cette requête avec plusieurs jointures et qui contient plusieurs select,j'ai utilisé "UNION" pour faire ça et je me demandais s'il y'avait moyen d'enlever les plusieurs select et l'union et avoir un simple select ?
    je sais pas rendre ça plus 'pro'..
    merci d'avance !
    voici ma requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    select A.libellé from table1 A LEFT OUTER JOIN table2 B ON A.id=B.id WHERE B.cl1='CLI' and B.cl2=165 UNION select A.libellé from table3 A LEFT OUTER JOIN table4 B ON A.id=B.id where B.cl3= 'AAB' and B.cl2=165 and B.cl4 = 'A8Y' UNION select A.libellé from table5 A LEFT OUTER JOIN table6 B ON A.id=B.id where  B.cl2=165 and B.cl5 = 'DUPOND'

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    Combien de table différente avez vous réellement ?

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Déjà un peu de mise en page, c'est tellement plus lisible (tout mettre sur une ligne, avez-vous au moins essayé de relire ?) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    SELECT A.libellé
      FROM table1 A
           LEFT OUTER JOIN table2 B
             ON A.id = B.id
     WHERE B.cl1 = 'CLI'
       AND B.cl2 = 165
     UNION
    SELECT A.libellé
      FROM table3 A
           LEFT OUTER JOIN table4 B
             ON A.id = B.id
     WHERE B.cl3 = 'AAB'
       AND B.cl2 = 165
       AND B.cl4 = 'A8Y'
     UNION
    SELECT A.libellé
      FROM table5 A
           LEFT OUTER JOIN table6 B
             ON A.id = B.id
     WHERE B.cl2 = 165
       AND B.cl5 = 'DUPOND'
    Sur le fond de la requête, comme il a l'air de s'agir de tables différentes avec des filtres différents, je ne pense pas que ce soit synthétisable.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut
    oui enfait c'est sur plusieurs tables..
    donc c'est le mieux que je puisse faire ?! :-/

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut
    En fait, le problème avec cette manière est que quand j'essaye de récupérer le résultat de la requête (côté java ), il considère que les 3 lignes sélectionnées sont celles de la première colonne et non 3 colonnes distinctes..

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    rajoutez une constante pour vous y retrouver du coté du code java.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT A.libellé, 0 as niveau
      FROM table1 A
           LEFT OUTER JOIN table2 B
             ON A.id = B.id
     WHERE B.cl1 = 'CLI'
       AND B.cl2 = 165
     UNION
    SELECT A.libellé, 1 as niveau
    ...

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Citation Envoyé par Halloula Voir le message
    il considère que les 3 lignes sélectionnées sont celles de la première colonne et non 3 colonnes distinctes
    Votre moteur ne considère rien, il exécute simplement ce que vous lui avez demandé, et votre requête écrite ainsi ne ramène bien qu'une seule colonne.

    Combien de lignes ramène chacune de vos requêtes unitaires ?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut
    ça me ramène une ligne par requête unitaire,donc en tout 3 lignes mais une seule colonne... alors que moi je voudrais avoir une seule ligne avec 3 colonnes

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Une solution qui ne fonctionnera que si et uniquement si vos requêtes ne ramèneront toujours qu'une seule ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    SELECT (SELECT A.libellé
              FROM table1 A
                   LEFT OUTER JOIN table2 B
                     ON A.id = B.id
             WHERE B.cl1 = 'CLI'
               AND B.cl2 = 165)      as col1
         , (SELECT A.libellé
              FROM table3 A
                   LEFT OUTER JOIN table4 B
                     ON A.id = B.id
             WHERE B.cl3 = 'AAB'
               AND B.cl2 = 165
               AND B.cl4 = 'A8Y')    as col2
         , (SELECT A.libellé
              FROM table5 A
                   LEFT OUTER JOIN table6 B
                     ON A.id = B.id
             WHERE B.cl2 = 165
               AND B.cl5 = 'DUPOND') as col3

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut
    il ne manque pas un quelque chose à cette requete ? j'ai l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ORA-00923 : FROM key word not found where expected
    je pense que c'est à cause du select(select qui n'a pas de from..

  11. #11
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    C'est ce qui arrive quand on ne précise pas son SGBD !
    Rajoutez FROM DUAL à la fin de la requête, ça fonctionnera.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut
    avec le DUAL ca marche mieux mais le resulat n'est pas bon,puisqu'il me raméne col1 et col2 vides
    enfin,tu comprendras mieux via l'imprimé écran ! (voir pièce jointe)
    Images attachées Images attachées  

  13. #13
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Pas de problème, je lis ces résultats :
    col1 : Granite client 165
    col2 : A8Y
    col3 : Population de mister Dupond
    Pour vous y aider, je vous conseille le forum SQL*Plus !

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 141
    Points : 59
    Points
    59
    Par défaut
    ok j'essaye ca
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 26/09/2008, 10h04
  2. [MySQL 5]Performance d'une requêtes select
    Par SuperCed dans le forum Requêtes
    Réponses: 8
    Dernier message: 01/08/2006, 12h51
  3. une requête SELECT INTO provoque un plantage sous Access
    Par Invité dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 29/12/2005, 11h35
  4. fusion de 2 colonnes dans une requête select?
    Par epeichette dans le forum Requêtes
    Réponses: 1
    Dernier message: 04/11/2005, 23h05
  5. C'est possible dans une requête SELECT ?
    Par Kokito dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/04/2005, 16h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo