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

Langage SQL Discussion :

Recherche de doublon particulière


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    architecte
    Inscrit en
    Avril 2016
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : architecte
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2016
    Messages : 38
    Points : 19
    Points
    19
    Par défaut Recherche de doublon particulière
    Bonjour à tous,

    je cherche à réaliser une requête pour retourner des doublons mais j'ai l'impression que j'ai trop la tête dans le guidon ou alors que je ne connais peut être pas la fonction qui va résoudre mon problème bref: je n'arrive à rien... je viens donc quérir votre aide

    j'ai 3 tables T1(M_name, M_id) T2(M_id, C_id) T3 (C_name, C_id)

    les champs name sont des varchar et les champs id sont les clés. la table T2 fait la liaison entre des clés de T1 et des clés de T3

    je cherche à récupérer, dans un premier temps, les champs "T1.M_name" commençant par la même lettre (mettons "a" pour l'exemple) et ayant le même "T2.C_id"

    ce que j'essaye de coder de la manière suivante :
    ne vous moquez pas de mon manque de logique ou de technique dans le code SQL qui suit car je ne m'y connait pas vraiment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM T1 INNER JOIN T2 on T1.M_id=T2.M_id WHERE T1.M_name LIKE 'a%'
    je m'arrête donc au fait de renvoyer tous les champs associés de T1 et T2 dont "T1.M_name" commence par la lettre "a". je m'arrête la pour la simple et bonne raison que je n'arrive pas a imaginer comment isoler les doublons sur "T2.C_id"

    une fois que j'arriverais à identifier les doublons, j'aimerai pouvoir renvoyer le champs "T3.C_name" correspondant.

    j'espère que mon explication est suffisamment claire et je vous souhaite un beau weekend !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    Pour ma part je ferais ainsi:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select t1A.m_name,t1B.m_name
    from T2 as t2A
    inner join t2 as t2B on T2A.c_id = t2B.c_id and t2b.m_id < t2A.m_id
    inner join T1 as T1A on T1A.m_id = T2A.m_id
    inner join t1 as t1B on t1B.m_id = t2B.m_ID
    where t1A.m_name like 'a%'
    and t1B.m_name like ''a%'
    Pourquoi ai-je mis t2b.m_id < t2A.m_id dans la jointure entre t2A et t2B ? D'une part pour rejeter une correspondance entre une ligne de t2 et elle-même, et aussi pour rejeter les "jumeaux": si par exemple les lignes 1 et 2 respectent les critères de recherches, je renvoie le couple 1/2 mais pas le couple 2/1 qui fait doublon.

    Tatayo.

  3. #3
    Membre à l'essai
    Homme Profil pro
    architecte
    Inscrit en
    Avril 2016
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : architecte
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2016
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    salut et merci pour ta réponse!

    quand j'envoie cette commande, je récupère un résultat vide alors que j'ai bien ce type de doublon.

    est ce que le from ne devrait pas être sur T1 au lieu de T2?

    A priori le problème ne vient pas de la. j'épluche ta requête pour bien la comprendre

  4. #4
    Membre à l'essai
    Homme Profil pro
    architecte
    Inscrit en
    Avril 2016
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : architecte
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2016
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Alors,
    j'ai relancé une nouvelle fois la requête et .. ça fonctionne . allez savoir pourquoi j'ai eu un résultat vide en premier lieu.

    je vais donc maintenant chercher comment afficher T3.C_name du doublon .

    merci

  5. #5
    Membre à l'essai
    Homme Profil pro
    architecte
    Inscrit en
    Avril 2016
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : architecte
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2016
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    la méthode que j'ai trouvé pour récupérer le C_name correspondant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select t1A.m_name,t1B.m_name,T3.C_name
    from T2 as t2A
    inner join t2 as t2B on T2A.c_id = t2B.c_id and t2b.m_id < t2A.m_id
    inner join T1 as T1A on T1A.m_id = T2A.m_id
    inner join t1 as t1B on t1B.m_id = t2B.m_ID
    inner join T3 on T2A.c_id = T3.c_id
    where t1A.m_name like 'a%'
    and t1B.m_name like ''a%'
    je rajouter donc une jointure sur T3 et je compare a "T2A.C_id". J'aurais pu comparer à "T2B.C_id" étant donné que ça sera le même.

    merci pour cette requête !

    P.S: pour info, la requete me renvoyait un résultat vide car je faisais une recherche sur les valeurs commençant par a et pas le reste

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/11/2005, 14h24
  2. Recherche de doublons "non strict"
    Par Oluha dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/01/2005, 09h21
  3. [VBA] Algo de recherche de doublons
    Par guams dans le forum VBA Access
    Réponses: 6
    Dernier message: 27/07/2004, 17h10
  4. recherche de doublons dans un fichier texte
    Par portu dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 07/10/2003, 14h13
  5. Réponses: 2
    Dernier message: 19/08/2003, 18h04

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