Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Débuter
Débuter Forum d'entraide pour débuter avec 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 24/08/2011, 20h20   #1
Invité de passage
 
Inscription : décembre 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 5
Points : 0
Points : 0
Par défaut Optimisation d'une subquery

Bonjour!
Je suis présentement stagiaire dans une boite de T.I et aujourd'hui on m'a demandé de faire une requête Oracle qui fais affaire à 3 table pour insérer dans une 4ième. J'ai fait le premier truc qui m'est venu à l'esprit soit un 'switch case' de subquery. Je sais pertinemment que ce n'est pas la manière la plus efficace mais c'est la seule que je connais. J'ai souvent lu que les JOIN sont plus efficace que les subquery.

J'aimerai savoir de quel manière je pourrais ré-écrire mon énoncé de manière efficace.


Code :
1
2
3
4
5
6
7
 
SELECT A.*, Case when (SELECT length_dist_unit FROM scenario WHERE A.sce_scenario_name = scenario_name) = 'FT'
									then Cast((SELECT wheelbase FROM ac_data WHERE A.ad_ac_code = ac_code ) AS decimal(10,1))
								when (SELECT length_dist_unit FROM scenario WHERE A.sce_scenario_name = scenario_name) = 'M'
									then Cast(((SELECT wheelbase FROM ac_data WHERE A.ad_ac_code = ac_code ) * 0.3048) AS decimal(10,1))
								End AS WHEELBASE          
FROM scn_aircraft A;
Ma question est une simple curiosité et par souci de bien faire les choses parce que mon algo ne va servir qu'une fois.

Merci de votre aide
elwiss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 20h45   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Ca devrait être quelque chose comme ça, si tu n'as pas besoin de la jointure externe (LEFT JOIN) supprime la (en supprimant le mot clé LEFT)
Code :
1
2
3
4
5
6
7
8
9
SELECT A.*,
       case when s.length_dist_unit = 'FT'
            then Cast(ad.wheelbase AS decimal(10,1))
            when s.length_dist_unit = 'M'
            then Cast(ad.wheelbase * 0.3048) AS decimal(10,1))
        end AS WHEELBASE
  FROM scn_aircraft A
  LEFT JOIN scenario s ON s.scenario_name = A.sce_scenario_name
  LEFT JOIN ac_data ad ON ad.ac_code = A.ad_ac_code
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 15h11   #3
Invité de passage
 
Inscription : décembre 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 5
Points : 0
Points : 0
Merci beaucoup pour cette réponse rapide! C'est beaucoup plus simple comme ça!
elwiss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 15h24   #4
Invité de passage
 
Inscription : décembre 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 5
Points : 0
Points : 0
Je viens d'essayer la réponse que skuatamad m'a proposé pour comparer les vitesse d'exécution j’obtiens une erreur: SQL statement not properly ended.

Je n'arrive pas à voir pourquoi...
elwiss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2011, 00h54   #5
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Je viens juste de voir ton message, j'ai fait une erreur de syntaxe, il faut évidemment changer la ligne :
Code :
then Cast(ad.wheelbase * 0.3048) AS decimal(10,1))
par :
Code :
then Cast(ad.wheelbase * 0.3048 AS decimal(10,1))
Mais je pense que tu l'avais trouvé par toi même.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h30.


 
 
 
 
Partenaires

Hébergement Web