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 :

Aide sur jointure à utiliser


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 28
    Par défaut Aide sur jointure à utiliser
    Bonjour à tous, j'aimerais faire une requête qui me permet de rapprocher des personnes, je travail sur deux bases de données différentes, je me connecte sur une et à partir d'un link je peux me connecter sur l'autre.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT  Translate(Upper(base1.NOM), 'àãâäçéèêëîïôöûüù _-^¨"''', 'aaaaceeeeiioouuu'), Translate(Upper(base1.PRENOM),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu'), Translate(Upper(base2.NAME),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu'), Translate(Upper(base2.FIRSTNAME),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu')
    FROM    AGENT base1, p_ctc@linkbase1base2 base2
    WHERE   Translate(Upper(base1.NOM), 'àãâäçéèêëîïôöûüù _-^¨"''', 'aaaaceeeeiioouuu') = Translate(Upper(base2.FIRSNAME),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu')
    AND     Translate(Upper(base1.PRENOM),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu') = Translate(Upper(base2.FIRSTNAME),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu');
    En gros, il y a des personnes qui existent dans les deux bases, des personnes n'existant que dans la première et des personnes qui n'existent que dans la deuxième. Les translate servent à enlever tous les caractères spéciaux, blancs etc ... Pour que par exemple un Dupond Jean Pierre dans la première base et un Dupond Jean-Pierre dans la deuxième soient egaux car c'est la même personne, ce qui donnera DUPOND JEANPIERRE pour relever l'égalité. J'aimerais les rapprocher de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    BASE1            BASE2
    NOM PRENOM       NAME FIRSTNAME
    Avec ce que j'ai fait ça marche, maintenant je vais vous faire une batterie de tests pour voir ce que j'aimerais, car actuellement je n'ai pas tous les agents des deux cotés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    BASE1                        BASE2
    DUPOND JEANPIERRE            DUPOND JEANPIERRE
    DUPONT MARC                    
                                 CLAVIER CHRISTIAN
    Si il y a une case blanche, le nom n'est pas présent dans la base.
    Voila j'espère que c'est compréhensible. Merci.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 28
    Par défaut
    Ca devrait être de ce style mais j'ai une erreur "la commande sql ne se termine pas correctement"
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT  base1.NOM, base1.PRENOM, base1.DEPART, Translate(Upper(base1.NOM), 'àãâäçéèêëîïôöûüù _-^¨"''', 'aaaaceeeeiioouuu'), Translate(Upper(base1.PRENOM),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu'), base2.NAME, base2.FIRSTNAME, base2.VALIDPNT, Translate(Upper(base2.NAME),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu'), Translate(Upper(base2.FIRSTNAME),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu')
    FROM    AGENT base1 FULL OUTER JOIN p_ctc@linkbase1base2 base2
    ON      Translate(Upper(base1.NOM), 'àãâäçéèêëîïôöûüù _-^¨"''', 'aaaaceeeeiioouuu') = Translate(Upper(base2.FIRSNAME),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu')
    AND     Translate(Upper(base1.PRENOM),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu') = Translate(Upper(base2.FIRSTNAME),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu');

  3. #3
    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
    Déjà vous avez un GROS problème dans votre requête au niveau du translate.
    Vous tranformez tous vos caractères en majuscule avec UPPER, puis vous demandez de remplacer une liste de caratères par une autre.

    Pas de soucis, sauf que cette liste est, hors caractères spéciaux, en minuscule !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    translate(upper(base1.nom), 'ÀÃÂÄÇÉÈÊËÎÏÔÖÛÜÙ _-^¨"''', 'AAAACEEEEIIOOUUU')
    Celà dit ce n'est pas celà qui provoque l'erreur de syntaxe avec le FULL OUTER JOIN (qui est la meilleure requête).

    Quelle est votre version d'Oracle ? A vérifier, mais le FULL OUTER JOIN n'est arrivé il me semble qu'à partir de la version 9.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Par défaut
    Bonjour,

    La première condition de jointure semble fausse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON      Translate(Upper(base1.NOM), 'àãâäçéèêëîïôöûüù _-^¨"''', 'aaaaceeeeiioouuu') = Translate(Upper(base2.FIRSNAME),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu')
    Ne serait-ce pas base2.NAME plutot que FIRSNAME?

Discussions similaires

  1. [MS Query] neophyte demande aide sur jointures SQL
    Par thorgal972 dans le forum Langage SQL
    Réponses: 19
    Dernier message: 27/11/2006, 17h13
  2. Réponses: 1
    Dernier message: 06/09/2006, 14h21
  3. Aide sur jointure externe
    Par viny dans le forum Langage SQL
    Réponses: 5
    Dernier message: 01/09/2006, 16h51
  4. [Débutant] Aide sur jointure
    Par chapron dans le forum Langage SQL
    Réponses: 1
    Dernier message: 31/08/2006, 23h00
  5. Aide sur l'utilisation du composant TupdateSQL avec Tquery
    Par mezianewanadoo dans le forum Bases de données
    Réponses: 1
    Dernier message: 24/06/2006, 18h17

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