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 :

Problème de jointure [Fait]


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Par défaut Problème de jointure
    Bonjours, je suis débutant et j'ai un petit soucis sur une jointure entre deux table.
    En effet, sur ma 1ère table (A) j'ai le maximum d'enregistrement possible, sur ma 2ème table (B), la ligne correspondante n'existe pas forcément.

    Select Champ from A, B
    where
    B.Clé=A.Clé(+)

    Avec cette requête, mon nombre de ligne es limité à la table B.
    Je voudrai affiché toute les ligne de la table A, même si elle n'existe pas dans la table B.

    Merci

  2. #2
    Membre éprouvé
    Inscrit en
    Février 2009
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 127
    Par défaut
    Bonjour,

    Teste ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT CHAMP
    FROM   TABLE_B B
           INNER JOIN TABLE_A A
                 ON B.CLE = A.CLE
    Tu peux regarder http://sqlpro.developpez.com/cours/sqlaz/jointures/
    pour tous les types de jointures.

    La syntaxe avec (+) est ancienne. Mieux vaut utiliser inner joint, outer join, ...

    Sylvain

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Par défaut
    Merci pour ta réponse, mais j'ai une vielle version d'oracle et les inner join ne fonctionne pas...

  4. #4
    Membre éprouvé
    Inscrit en
    Février 2009
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 127
    Par défaut
    Ah ok dommage.

    Dans ce cas, teste çà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Select Champ from A, B
    where 
    A.Clé=B.Clé(+)
    Tu auras ainsi les valeurs de A qui n'ont pas de rattachement à B.

    Sylvain

  5. #5
    Membre Expert Avatar de fatsora
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 103
    Par défaut
    Citation Envoyé par iSylvain Voir le message
    Bonjour,

    Teste ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT CHAMP
    FROM   TABLE_B B
           INNER JOIN TABLE_A A
                 ON B.CLE = A.CLE
    Tu peux regarder http://sqlpro.developpez.com/cours/sqlaz/jointures/
    pour tous les types de jointures.

    La syntaxe avec (+) est ancienne. Mieux vaut utiliser inner joint, outer join, ...

    Sylvain
    Bonjour,

    Ca peut induire en erreur las novices ce que tu envoies la

    mieux vaux envoyer des syntaxes anciennes qui fonctionnent que des syntaxes "modernes" fausses ...

    la syntaxe exacte est
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT CHAMP
    FROM   TABLE_B B
          RIGHT OUTER JOIN TABLE_A A
                 ON B.CLE = A.CLE

  6. #6
    Membre éprouvé
    Inscrit en
    Février 2009
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 127
    Par défaut
    Citation Envoyé par fatsora Voir le message
    Bonjour,

    Ca peut induire en erreur las novices ce que tu envoies la

    mieux vaux envoyer des syntaxes anciennes qui fonctionnent que des syntaxes "modernes" fausses ...

    la syntaxe exacte est

    Code sql :
    </p><p>SELECT CHAMP</p><p>FROM TABLE_B B</p><p> RIGHT OUTER JOIN TABLE_A A</p><p> ON B.CLE = A.CLE</p><p>&nbsp;</p><p>
    Bonjour,

    Désolé.
    En effet, ma syntaxe n'était pas correcte.
    Lorsque j'en ai moi meme besoin je sais m'en servir en faisant different test mais là j'ai simplement fais une recherche.

    Merci à toi pour la correction !

    Sylvain

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Par défaut
    SELECT Champ FROM A, B
    WHERE
    A.Clé=B.Clé(+)


    Cette requête ne fonctionne pas non plus, je me tire les cheveux...

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Qu'est-ce qui ne fonctionne pas ?
    Exécution, résultat ?

    Est-ce que vos colonne s'appellement vraiment clé ?
    Si vous avez un accent je pense qu'il faut utiliser des doubles quotes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT count(*)
    FROM A, B
    WHERE A."Clé"=B."Clé"(+)
    Pouvez-vous nous donner les résultats de la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from sys.v_$version

  9. #9
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Par défaut
    Non mes colonnes ne s'appelle pas "Clé".
    C'est une écriture générique.

    Ce qu'il ne fonctionne pas, c'est que le résultat est restreint.
    En fait si la colonne dans la ligne n'existe pas dans la table B, aucun résultat ne s'affiche en utilisant les deux table.
    Par exemple dans la table A j'ai 20 000 lignes et 20 000 clé différentes.
    Sur ces 20 000 ligne, seulement 1 000 correspondance dans la table B.

    Je voudrai afficher les 20 000 lignes avec les résultats correspondant dans la table B avec une seule requête.

    Version :
    --------
    Oracle8i Enterprise Edition Release 8.1.7.3.0 - 64bit Production
    PL/SQL Release 8.1.7.3.0 - Production
    CORE 8.1.7.0.0 Production
    TNS for HPUX: Version 8.1.7.3.0 - Production
    NLSRTL Version 3.4.1.0.0 - Production

  10. #10
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Par défaut
    J'utilise TAOD VI (6.3.3.1.g) comme soft...
    Je n'ai que celui-ci à disposition au boulot...

  11. #11
    Membre éprouvé
    Inscrit en
    Février 2009
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 127
    Par défaut
    Peux tu donner la structure de tes 2 tables ?

    Sylvain

  12. #12
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Par défaut
    Merci pour votre aide, j'ai fait une belle bourd de débutant...
    Les tables étant indexé sur d'autre champ que la clé, je leur mettait des valeur figées.

    Select champ from a, b
    where a.cle=b.cle
    and a.index='valeur' and b.index='valeur'

    En retirant la sélection sur l'index dans la table b, je vois toutes les valeurs...
    Par contre la requête est un poil longue...

  13. #13
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vous n'avez pas à retirer le filtre sur votre table b :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select champ
    from a, b
    where a.cle = b.cle(+)
    and a.index='valeur'
    and b.index(+)='valeur'
    ANSI :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select champ
    from
        a left outer join b
          on a.cle = b.cle
         and b.index = 'valeur'
    where a.index = 'valeur'
    Enfin à l'avenir pensez à donner la totalité de votre requête ainsi qu'un jeu d'essai, il y a des choses qu'on ne peut pas deviner.

Discussions similaires

  1. Problème de jointure de tables
    Par AurelBUD dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/04/2005, 16h27
  2. Probléme de jointure
    Par Ajrarn dans le forum Langage SQL
    Réponses: 14
    Dernier message: 24/02/2005, 14h57
  3. Vraisemblable problème de jointure
    Par pimousse76 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/02/2005, 15h34
  4. [MS Access] Problème de jointure
    Par Erakis dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/02/2005, 21h15
  5. Problème de jointure ?!
    Par ebaynaud dans le forum Langage SQL
    Réponses: 8
    Dernier message: 03/11/2004, 11h27

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