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

Dotnet Discussion :

Algorithmique : Comparaison performante de table/liste de string [Débutant]


Sujet :

Dotnet

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 75
    Points : 48
    Points
    48
    Par défaut Algorithmique : Comparaison performante de table/liste de string
    Bonjour a tous,

    Je requete dans une deux grande tables sensees etre identiques de tres nombreuses lignes. Jusqu'a 400 000 de chaques cotes avec entre 2 et 30 colonnes.

    J'aimerais les comparer pour savoir a quel point elles sont differentes si elles le sont.

    Jusqu'a maintenant, je comparais dans mon code c# la celule y de la ligne x de la table 1 avec la celule y de la ligne x de la table 2 en ayant trie au prealable mon resultat via un order by dans ma requete sql.

    Le probleme, c'est que lorsque j'ai des lignes supplementaires d'un cote ou de l'autre, ca n'est plus du tout efficace. Si par exemple j'ai une ligne manquante des le debut, alors tout est decale et mon resultat donnant 99% de difference n'est pas tres pertinent.

    Ma premiere idee fut de rechercher pour chaque ligne de gauche une ligne correspondante a droite mais ca ne me parait pas optimale non plus et je ne trouve pas d'algorithme qui me convienne.

    Vous auriez une idee ?

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 9
    Points : 25
    Points
    25
    Par défaut
    tu peux le faire directement niveau sql

    il suffit de faire la différence entre les deux tables, tu aura les lignes qui sont dans l'une et pas dans l'autre.

    Ex:
    SELECT nom, prénom
    FROM Table1
    WHERE Table1.nom NOT IN (SELECT nom FROM Table2) AND Table1.prénom NOT IN (SELECT prénom FROM Table2);

    NB : ll faut au préalable que les colonnes de la table retournés soient identique sinon tu fais une projection sur les tables (comme l'exemple ci dessus)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 9
    Points : 25
    Points
    25
    Par défaut
    tu peux aussi le faire niveau c# en utilisant des requetes linq, c'est super efficace.

    Soit le résultat de tes deux requetes sur chaque tables dans datatable (table1 & table2)
    Avec le code suivant tu obtient la différence entre les deux tables.
    Ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    DataTable table1= ds.Tables["table1"];
    DataTable table2= ds.Tables["table2"];
    var diff= table1.AsEnumerable().Except(table2.AsEnumerable(),
                                                        DataRowComparer.Default);
    NB : il faut bien entendu tenir compte des colonnes desdeux tables, elles doivent être identiques.

    ensuite il te suffit de faire un cast sur la variable diff pour la convertir en datatable et le tour est joué.

    espérant t'avoir aidé.

    Bon courage

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2012
    Messages : 75
    Points : 48
    Points
    48
    Par défaut
    Merci beaucoup, Linq c'est effectivement revele tres efficace et tres interessant. Je le reutiliserai.

    La solution via SQL est pas mal non plus mais ca aurai ete plus lent dans mon cas.

    Encore merci pour votre soutient.

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

Discussions similaires

  1. [VB.net] Join d'un Array list de string?
    Par the_bmo dans le forum VB.NET
    Réponses: 8
    Dernier message: 15/12/2005, 13h53
  2. Comparaison de 2 tables (1 interne et 1 externe) en SQL
    Par nicky0007us dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 17/11/2005, 13h25
  3. Comparaison d'une liste de string à un string
    Par maxazac dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 19/10/2005, 15h39
  4. comparaison entre 2 tables
    Par halina dans le forum Requêtes
    Réponses: 10
    Dernier message: 13/05/2005, 15h18
  5. Réponses: 6
    Dernier message: 21/01/2004, 13h25

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