Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/06/2011, 10h15   #1
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 141
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Tunisie

Informations forums :
Inscription : janvier 2007
Messages : 141
Points : 29
Points : 29
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 :
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'
Halloula est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 10h24   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
bonjour,

Combien de table différente avez vous réellement ?
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 11h00   #3
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
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 :
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.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 11h06   #4
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 141
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Tunisie

Informations forums :
Inscription : janvier 2007
Messages : 141
Points : 29
Points : 29
oui enfait c'est sur plusieurs tables..
donc c'est le mieux que je puisse faire ?! :-/
Halloula est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 11h24   #5
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 141
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Tunisie

Informations forums :
Inscription : janvier 2007
Messages : 141
Points : 29
Points : 29
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..
Halloula est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 13h03   #6
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
rajoutez une constante pour vous y retrouver du coté du code java.

Code :
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
...
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 14h31   #7
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
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 ?
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 14h52   #8
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 141
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Tunisie

Informations forums :
Inscription : janvier 2007
Messages : 141
Points : 29
Points : 29
ç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
Halloula est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 15h13   #9
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Une solution qui ne fonctionnera que si et uniquement si vos requêtes ne ramèneront toujours qu'une seule ligne :
Code :
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
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 15h56   #10
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 141
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Tunisie

Informations forums :
Inscription : janvier 2007
Messages : 141
Points : 29
Points : 29
il ne manque pas un quelque chose à cette requete ? j'ai l'erreur

Code :
 ORA-00923 : FROM KEY word NOT found WHERE expected
je pense que c'est à cause du select(select qui n'a pas de from..
Halloula est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 15h58   #11
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
C'est ce qui arrive quand on ne précise pas son SGBD !
Rajoutez FROM DUAL à la fin de la requête, ça fonctionnera.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 16h43   #12
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 141
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Tunisie

Informations forums :
Inscription : janvier 2007
Messages : 141
Points : 29
Points : 29
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
Type de fichier : png imprim1.PNG (2,4 Ko, 11 affichages)
Halloula est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 16h55   #13
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
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 !
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 18h25   #14
Nouveau Membre du Club
 
Inscription : janvier 2007
Messages : 141
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Tunisie

Informations forums :
Inscription : janvier 2007
Messages : 141
Points : 29
Points : 29
ok j'essaye ca
merci
Halloula est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h01.


 
 
 
 
Partenaires

Hébergement Web