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 :

Rupture de jointure entre deux tables dans une requête


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Par défaut Rupture de jointure entre deux tables dans une requête
    Bonjour je dois effectuer une jointure entre deux tables pour qu'une fois la jointure faiite sur trois colonnes en respectant des conditions sur l'une des tables, ça m'améne des données de l'autre table sur une jointure de deux colonnes seulement.

    Exemple:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    TA
     
    col1               col2         col3               col4
    1                   2              3                 4
    5                   6              7                 8
    9                  10              11               12
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    TB
     
    col5       col6           col7               col8
    1            2              3                  8547  
    1            2              6                  9632
    1            2              0                  3696
    Maintenant je souhaite quand la jointue est faite sur les trois premieres colonnes des deux tables, aprés que ça puisse se jouer sur seulement les deux colonnes.
    exemple une requête qui me sortira seule la premiére ligne dela table A selon une condition définie :
    aprés les autres lignes doivent sortir les autres lignes de la table B pour lesquelles la jointure satisfasse les deux premiéres colonnes.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    col1    col2        (col3 ou col7)       col8                     col4
     1        2            3                8547                        4
                           6                9632
                           0                3696
    Ici la requête ne doit ramner que la premiére ligne de la table A., c'est pour ça j'ai mis col3 ou col7 car aprés c'est col7 pour la deuxiéme table à savoir TB qui doit venir.

    Quel type de jointure je dois mettre en place pour réaliser ça ?
    merci de vos aides .

  2. #2
    Membre actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 44
    Par défaut
    Bonjour,

    Maintenant je souhaite quand la jointue est faite sur les trois premieres colonnes des deux tables, aprés que ça puisse se jouer sur seulement les deux colonnes.
    Cela ressemble fort à une jointure externe de TB vers TA sur les trois premières colonnes des deux tables.

    aprés les autres lignes doivent sortir les autres lignes de la table B pour lesquelles la jointure satisfasse les deux premiéres colonnes.
    à quoi il faudrait ajouter une restriction sur TB, stipulant qu'on ne doit sortir que les lignes pour lesquelles on trouve au moins une correspondance dans TA sur les deux premières colonnes :

    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
     
    select
           TA.col1
          ,TA.col2
          ,TB.col7
          ,TB.col8
          ,TA.col4
      from TB
           LEFT OUTER JOIN TA
                        ON     TA.col1 = TB.col5
                           AND TA.col2 = TB.col6
                           AND TA.col3 = TB.col7
     where exists (select 1
                     FROM TA
                    where
                          TA.col1 = TB.col5
                      AND TA.col2 = TB.col6)
    C'est bien ça ?

    Cdlt,
    OD

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Par défaut
    Oui c'est bien ça mais quand je veux des conditions sur la Table A , je peux l'adjoindre dans le WHERE avec un and ?

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Par défaut
    En fait, ce que je veux c'est que lorsqu'il n'arrive plus à ramener des lignes pour la table TA avec les conditions définies, que ça raméne les lignes provenant de la table TB pour lesquelle ils ont sur deux colonnes en commun maintenant(jointures sur deux colonnes eu leiu de trois).

    voilà

    la requête d'en haut ça raméne que quand ils ont les trois colonnes en commun.

  5. #5
    Membre actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 44
    Par défaut
    Bonsoir,

    Je le mettrais dans la clause ON. Par exemple :
    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
    SELECT
           TA.col1
          ,TA.col2
          ,TB.col7
          ,TB.col8
          ,TA.col4
      FROM TB
           LEFT OUTER JOIN TA
                        ON     TA.col1 = TB.col5
                           AND TA.col2 = TB.col6
                           AND TA.col3 = TB.col7
                           AND TA.col4 = 4
     WHERE EXISTS (SELECT 1
                     FROM TA
                    WHERE
                          TA.col1 = TB.col5
                      AND TA.col2 = TB.col6)
    Cdlt,
    OD

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2005
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 469
    Par défaut
    D'accord je vois bien Olivier mais quand la condition doit porter aussi non pas seulement sur un colonne de la table TA mais sur d'autres colonnes d'autres tables qui seron en jointures simples avec TA, je me demande si je dois le placer aprés le On ou à l'intérieur de exists().

    Je m'explique si on doit avoir au niveau du SELECT prncipal d'autres colonnes provenant d'autres tables comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select TC.col9, TD.col10 , TA.col9,Ta.col10
    et ces colonnes seront intervenues au niveau des conditons sur la table TA dont je vous parlais comme genre :
    TA.col9=TC.col9
    and TD.col10=TA.col10

    Donc ces conditions de jointures qui portent sur d'autres colonnes autres que celles de la table TB, on va les placer aprés le ON du LEFT ou dans l'autres SELECT de exists ?
    Et aussi la liste des autres tables on les mets sur quelle partie des SELECT ?

    Cordialement.
    madina

Discussions similaires

  1. [MySQL] Faire une jointure entre deux tables qui ne sont pas dans la même base de données
    Par sandddy dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 03/04/2008, 14h18
  2. Jointure entre deux champs d'une même table
    Par oubli dans le forum Requêtes
    Réponses: 8
    Dernier message: 11/12/2007, 16h20
  3. recherche entre deux dates dans une requête
    Par emmanuel4945 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 29/11/2006, 21h42
  4. calcul entre deux champs dans une table
    Par pomar dans le forum Access
    Réponses: 7
    Dernier message: 29/11/2006, 18h27
  5. Comparaison entre deux dates dans une table
    Par Biskot75 dans le forum Access
    Réponses: 6
    Dernier message: 19/09/2006, 11h16

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