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 :

[Débutant] Problème avec un SELECT


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Paulinho
    Invité(e)
    Par défaut [Débutant] Problème avec un SELECT
    Bonjour,


    J'ai quatre tables:

    - al (cd_aluno, cd_curso, ...)
    - cur (cd_curso, ...)
    - hist (cd_curso, cd_aluno, cd_lectivo, ...)
    - primvez (cd_curso, cd_aluno, cd_lectivo, ...)

    J'ai fait un WHERE comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    WHERE (al.cd_curso = cur.cd_curso
     
          AND cur.cd_curso = hist.cd_curso
     
          AND primvez.cd_curso = hist.cd_curso
     
          AND primvez.cd_curso = al.cd_curso)
    Mais l'éxécution ne finit pas.

    Il y a une erreur mais je ne sais pas où...

    Merci d'avance.
    Dernière modification par orafrance ; 01/02/2008 à 14h03.

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 354
    Par défaut
    Afin de pouvoir dire qqch alors il nous faut:
    - La version Oracle
    - Les tailles des tables
    - Les index créés sur ces tables
    - Eventuellement si les statistiques sont collectées ou non

  3. #3
    Paulinho
    Invité(e)
    Par défaut
    Oracle 9.2

    table al: taille 119

    table cur: taille 23 (view)

    table hist: taille 3 (view)

    table primvez: taille 3 (view)

    Je ne sais pas ce que c'est l'index...

    Pas de statistiques.

    Merci.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 354
    Par défaut
    Nous voilà pas trop avancés ...
    Si ce sont des vues alors les informations fournies ne servent pas à grand chose!
    Il faut avoir les informations sur les tables sous-jacentes.

  5. #5
    Membre émérite
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Par défaut
    c'est normal,
    si tu écris la requête avec des join, ça te donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select * 
    from al
    join cur on al.cd_curso = cur.cd_curso
    join hist on cur.cd_curso = hist.cd_curso
    join primvez on primvez.cd_curso = hist.cd_curso
    donc automatiquement ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND primvez.cd_curso = al.cd_curso
    est toujours vrai mais tu créé un jointure circulaire que ne peut résoudre le moteur d'oracle: il jointe al avec cur, puis hist avec cur, puis primvez avec hist (jusque là c'est ok) puis tu lui demande de rejointer primvez avec al (la c'est plus bon)

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 354
    Par défaut
    Citation Envoyé par serge0934 Voir le message
    c'est normal,
    si tu écris la requête avec des join, ça te donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select * 
    from al
    join cur on al.cd_curso = cur.cd_curso
    join hist on cur.cd_curso = hist.cd_curso
    join primvez on primvez.cd_curso = hist.cd_curso
    donc automatiquement ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AND primvez.cd_curso = al.cd_curso
    est toujours vrai mais tu créé un jointure circulaire que ne peut résoudre le moteur d'oracle: il jointe al avec cur, puis hist avec cur, puis primvez avec hist (jusque là c'est ok) puis tu lui demande de rejointer primvez avec al (la c'est plus bon)
    Non! Ce raisonnement n'est pas correct ...
    Voici un petit exemple avec un ensemble de tables qui ont une colonne en commun (numvol)
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    explain plan
    for select *
    from vol v, depart d, reservation r
    where v.numvol = d.numvol and d.numvol = r.numvol
    
    explain plan succeeded.
    select *
    from table (dbms_xplan.display ('plan_table', null, 'serial'))
    
    PLAN_TABLE_OUTPUT                                                                                                                                                                                                                                                                                            
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
    Plan hash value: 1896996733                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                 
    --------------------------------------------------------------------------------------                                                                                                                                                                                                                       
    | Id  | Operation           | Name           | Rows  | Bytes | Cost (%CPU)| Time     |                                                                                                                                                                                                                       
    --------------------------------------------------------------------------------------                                                                                                                                                                                                                       
    |   0 | SELECT STATEMENT    |                |    13 |   949 |     6  (17)| 00:00:01 |                                                                                                                                                                                                                       
    |*  1 |  HASH JOIN          |                |    13 |   949 |     6  (17)| 00:00:01 |                                                                                                                                                                                                                       
    |*  2 |   HASH JOIN         |                |     8 |   448 |     5  (20)| 00:00:01 |                                                                                                                                                                                                                       
    |   3 |    TABLE ACCESS FULL| VOL            |     5 |   180 |     2   (0)| 00:00:01 |                                                                                                                                                                                                                       
    |   4 |    TABLE ACCESS FULL| DEPART         |     8 |   160 |     2   (0)| 00:00:01 |                                                                                                                                                                                                                       
    |   5 |   INDEX FULL SCAN   | PK_RESERVATION |     9 |   153 |     1   (0)| 00:00:01 |                                                                                                                                                                                                                       
    --------------------------------------------------------------------------------------                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                 
    Predicate Information (identified by operation id):                                                                                                                                                                                                                                                          
    ---------------------------------------------------                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                                 
       1 - access("D"."NUMVOL"="R"."NUMVOL")                                                                                                                                                                                                                                                                     
       2 - access("V"."NUMVOL"="D"."NUMVOL")                                                                                                                                                                                                                                                                     
    
    18 rows selected
    
    explain plan
    for select *
    from vol v, depart d, reservation r
    where v.numvol = d.numvol and d.numvol = r.numvol and v.numvol = r.numvol
    
    explain plan succeeded.
    select *
    from table (dbms_xplan.display ('plan_table', null, 'serial'))
    
    PLAN_TABLE_OUTPUT                                                                                                                                                                                                                                                                                            
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
    Plan hash value: 1896996733                                                                                                                                                                                                                                                                                  
                                                                                                                                                                                                                                                                                                                 
    --------------------------------------------------------------------------------------                                                                                                                                                                                                                       
    | Id  | Operation           | Name           | Rows  | Bytes | Cost (%CPU)| Time     |                                                                                                                                                                                                                       
    --------------------------------------------------------------------------------------                                                                                                                                                                                                                       
    |   0 | SELECT STATEMENT    |                |     3 |   219 |     6  (17)| 00:00:01 |                                                                                                                                                                                                                       
    |*  1 |  HASH JOIN          |                |     3 |   219 |     6  (17)| 00:00:01 |                                                                                                                                                                                                                       
    |*  2 |   HASH JOIN         |                |     8 |   448 |     5  (20)| 00:00:01 |                                                                                                                                                                                                                       
    |   3 |    TABLE ACCESS FULL| VOL            |     5 |   180 |     2   (0)| 00:00:01 |                                                                                                                                                                                                                       
    |   4 |    TABLE ACCESS FULL| DEPART         |     8 |   160 |     2   (0)| 00:00:01 |                                                                                                                                                                                                                       
    |   5 |   INDEX FULL SCAN   | PK_RESERVATION |     9 |   153 |     1   (0)| 00:00:01 |                                                                                                                                                                                                                       
    --------------------------------------------------------------------------------------                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                                 
    Predicate Information (identified by operation id):                                                                                                                                                                                                                                                          
    ---------------------------------------------------                                                                                                                                                                                                                                                          
                                                                                                                                                                                                                                                                                                                 
       1 - access("D"."NUMVOL"="R"."NUMVOL" AND "V"."NUMVOL"="R"."NUMVOL")                                                                                                                                                                                                                                       
       2 - access("V"."NUMVOL"="D"."NUMVOL")                                                                                                                                                                                                                                                                     
    
    18 rows selected
    Il n' y a pas une jointure supplémentaire mais les prédicats changent un peu

Discussions similaires

  1. [Débutant] Problème avec Dev-Cpp 4.9.9.0
    Par P4Pi dans le forum Dev-C++
    Réponses: 7
    Dernier message: 16/01/2010, 16h48
  2. [Débutant] Problème avec select case
    Par feynman dans le forum Fortran
    Réponses: 2
    Dernier message: 11/09/2007, 15h35
  3. [débutant] problème avec un "if"
    Par pingoui dans le forum Langage
    Réponses: 10
    Dernier message: 11/08/2004, 09h46
  4. [struts][JSP][select] problème avec le select
    Par redge_touch dans le forum Struts 1
    Réponses: 4
    Dernier message: 14/01/2004, 10h05
  5. [débutant] Problèmes avec CRegKey
    Par Pedro dans le forum MFC
    Réponses: 4
    Dernier message: 10/11/2003, 15h28

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