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 :

Comparaison de données pratiquement similaires [11g]


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 257
    Points : 395
    Points
    395
    Par défaut Comparaison de données pratiquement similaires
    Bonjour bonjour,

    J'aimerais savoir si il était possible en sql de sortir une liste de données qui ont des valeurs pratiquement similaires.
    Je m'explique. Imaginons une liste de clients, nom, prénom ...
    J'aimerais une requête qui compare la concaténation du nom et prénom et retourne la liste des valeurs pratiquement similaires (à 1 ou 2 caractères différents)

    Exemple de données

    Table tb_client :

    Tb_nom tb_prenom

    Dupont Jeanne
    Dupond Jeanne
    Suquet Yves
    Sucquet Yves
    Croc Odile

    Ici, Dupont Jeanne et Dupond Jeanne ont quasi la même écriture, la requête doit les remonter. Pareil pour Suquet Yves et Sucquet Yves.
    Par contre Madame Croc Odile n'ayant pas d'homonyme ou d'association possible, elle ne serait pas remontée.

    J'ai essayé le mot clé SOUNDEX mais cela ne ramène pas les bons résultats (Je donne la requête utilisé pour tester)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
         FROM tb_client 
         WHERE SOUNDEX(Tb_nom)
             = SOUNDEX('SUCQUET')
        order by 3;
    Si quelqu'un aurait une réponse à cela...

    Merci d'avance

  2. #2
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Tu dis "cela ne ramène pas les bons résultats" : et quel est le retour de ton SELECT justement?

    Ces liens sont utiles pour comprendre comment fonctionne cette fonction :
    https://www.techonthenet.com/oracle/...ns/soundex.php
    https://dzone.com/articles/understan...ex-oracle-plsq

    Au fait, est-ce que soundex marche pour le français?

    Finalement, utilise plutôt utl_match, c'est pile poil ton besoin : https://docs.oracle.com/database/121...h.htm#ARPLS352
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Vous pouvez utiliser un des algorithmes de rapprochement de motif que j'ai développé notamment "inférence basique" :
    https://sqlpro.developpez.com/cours/...raisons-motifs
    C'est plus rapide que le Levenshtein, qui est lui, la référence en la matière.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Perso j'aurais plus confiance dans un package certifié Oracle.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 257
    Points : 395
    Points
    395
    Par défaut
    Bonjour et merci pour vos réponses
    Je tente d'adapter la solution de SQLPRO pour le moment en Oracle, cela devrait être fait dans l'aprem. Je reviendrais vers vous si c'est bon

    Si c'est bon, SQLPRO, souhaites-tu avoir la transcription Oracle ? Autorises-tu a ce que je la poste ici ou autre ?
    C'est ton algo, donc je te laisse décider

  6. #6
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Citation Envoyé par JeanYvette Voir le message
    Je tente d'adapter la solution de SQLPRO pour le moment en Oracle
    Est-ce que tu as testé utl_match? A priori pas la peine de réinventer la roue, ce package devrait répondre à ton besoin.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    J'ai utilisé Jaro-Winkler dans un cas similaire en 2009 :
    https://www.developpez.net/forums/d7...-jaro-winkler/

    J'avais au final implémenté un package jaro winkler trouvé sur le web qui ne comportait pas le bug de la version Oracle.
    Depuis ce bug a été corrigé, donc vous pouvez utiliser le package Oracle.

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par JeanYvette Voir le message
    J'aimerais savoir si il était possible en sql de sortir une liste de données qui ont des valeurs pratiquement similaires.
    Je m'explique. Imaginons une liste de clients, nom, prénom ...
    J'aimerais une requête qui compare la concaténation du nom et prénom et retourne la liste des valeurs pratiquement similaires (à 1 ou 2 caractères différents)
    La solution à mettre en œuvre dépend surtout du but recherché
    Quel est le besoin fonctionnel ? à quoi servira la liste ainsi constituée ?

  9. #9
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 257
    Points : 395
    Points
    395
    Par défaut
    Je n'ai pas testé utl_match encore, je me repenche dessus que depuis midi
    Merci pour les nouvelles solutions

    Sinon pour répondre à ta question, le but ici est de sortir tout les clients qui ont, à quelques différences prêt, le même nom. Cela afin de voir les potentiel doublons qui ont pu s'introduire dans notre table

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    S'il s'agit d'identifier des doublons fonctionnels, alors il faut fiabiliser sur d'autres critères.
    Nom + Prénom est très peu fiable, il existe de très nombreux homonymes (ex : alexandre dumas ou georges bush père et fils)
    L'ajout de la date de naissance est un plus, mais c'est très insuffisant.
    Le numéro de sécu est déjà nettement plus fiable (et encore ça dépend des S.I.)

  11. #11
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 257
    Points : 395
    Points
    395
    Par défaut
    Le premier but est juste de ressortir les noms potentiellement pareil.
    L'analyse d'un doublon réel se fait après via différentes informations de champs qui peuvent montrer un doublon. C'est pour cela que la requête doit ramener juste les noms qui peuvent être pareil

  12. #12
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Ca peut éventuellement être une première approche, mais sous réserve d'avoir préalablement fiabilisé le cas échéant le mélange nom d'usage / nom de naissance et l'utilisation de pseudonymes.
    Pour avoir travaillé sur de nombreux projets de convergence de S.I. , je n'ai jamais commencé sur ce type de liste trop peu fiable : il va vous manquer des cas, et de nombreux cas seront présents à tort.

  13. #13
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Ce n'est pas bien compliqué à utiliser :
    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
    with mytable as
    (
    select 1 as id, 'Dupont Jeanne' as nom from dual union all
    select 2, 'Dupond Jeanne' from dual union all
    select 3, 'Suquet Yves'   from dual union all
    select 4, 'Sucquet Yves'  from dual union all
    select 5, 'Croc Odile'    from dual
    )
    select t1.id, t1.nom, t2.nom, t2.id
         , 100 * utl_match.jaro_winkler(t1.nom, t2.nom) as tx_match
      from mytable t1
      join mytable t2 on t2.id > t1.id
     where 100 * utl_match.jaro_winkler(t1.nom, t2.nom) >= 85;
     
     
    ID  NOM            NOM            ID  TX_MATCH
    --  -------------  -------------  --  ----------------
     1  Dupont Jeanne  Dupond Jeanne   2  96.9230769230769
     3  Suquet Yves    Sucquet Yves    4  97.7777777777778
    Par contre attention aux performances si votre table contient beaucoup de lignes, c'est consommateur en CPU et la jointure n'est pas vraiment optimale.

  14. #14
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 257
    Points : 395
    Points
    395
    Par défaut
    Oui merci, j'étais en train de perdre de l'esprit dans la partie de requête où je voulais exclure sur l'ID (ne pas comparer le même ID)....

    Merci de votre aide et désolé pour le potentiel doublon, j'étais jamais tombé sur l'UTL_MATCH pendant mes recherches

  15. #15
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par JeanYvette Voir le message
    Bonjour et merci pour vos réponses
    Je tente d'adapter la solution de SQLPRO pour le moment en Oracle, cela devrait être fait dans l'aprem. Je reviendrais vers vous si c'est bon

    Si c'est bon, SQLPRO, souhaites-tu avoir la transcription Oracle ? Autorises-tu a ce que je la poste ici ou autre ?
    C'est ton algo, donc je te laisse décider

    OUI, oui, oui... Mes algorithmes sont libre...
    Inférence basique est d'ailleurs utilisé par la préfecture de police depuis plus de 10 ans pour assurer un rapprochement phonétique entre la liste des terroristes envoyés par Interpol et les données des suspects de la police...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  16. #16
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par JeanYvette Voir le message
    Bonjour et merci pour vos réponses
    Je tente d'adapter la solution de SQLPRO pour le moment en Oracle, cela devrait être fait dans l'aprem. Je reviendrais vers vous si c'est bon

    Si c'est bon, SQLPRO, souhaites-tu avoir la transcription Oracle ? Autorises-tu a ce que je la poste ici ou autre ?
    C'est ton algo, donc je te laisse décider
    https://www.developpez.net/forums/d1...s/#post8432396

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

Discussions similaires

  1. Comparaison de données dans un tableau
    Par Azertime dans le forum LabVIEW
    Réponses: 3
    Dernier message: 12/05/2007, 23h13
  2. [VBA-E] Comparaison de donnée + Msgbox
    Par GardienDuCode dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 01/03/2007, 09h55
  3. comparaison de données
    Par fbu78 dans le forum Access
    Réponses: 2
    Dernier message: 01/02/2007, 08h06
  4. Comparaison de données entre deux arrays
    Par sironimo dans le forum Général Dotnet
    Réponses: 6
    Dernier message: 20/04/2006, 17h44
  5. Comparaison des données de deux schéma de mêmes structure
    Par Moez Sokrati dans le forum Oracle
    Réponses: 1
    Dernier message: 28/03/2006, 18h24

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