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

Algorithmes et structures de données Discussion :

Fusion de lignes de tables en éliminant les redondances


Sujet :

Algorithmes et structures de données

  1. #1
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 88
    Points
    88
    Par défaut Fusion de lignes de tables en éliminant les redondances
    Bonjours à tous,

    J'ai 2 tables contenant les meme colonnes à fusionner.
    Le problème c'est que je ne vois pas comment faire pour éliminer les redondances de lignes.

    Prenons l'exemple de tables ayant 4 colonnes: la 1ere contient la ligne "1,2,3,4" et la seconde les lignes "1,3,3,4" et "1,2,3,4".

    Comment puis-je faire pour enregistrer seulement la 1ere ligne dans la table résultat?

  2. #2
    Inactif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 97
    Points : 84
    Points
    84
    Par défaut Parcourir colonnes
    Ben faut que tu te fasses une proc qui compare colonne par colonne.
    Tu mets un bouléen MemeLigne =True, tu fais un parcours et si tu trouves une différence tu arrêtes le parcours en mettant MemeLigne=False.
    A la fin tu renvoies MemeLigne et le tour est joué.

  3. #3
    Membre du Club
    Homme Profil pro
    Editeur
    Inscrit en
    Juillet 2002
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2002
    Messages : 39
    Points : 50
    Points
    50
    Par défaut
    est-ce que l'utilisation de BatchMove ne permet pas de faire des copies de tables, avec certaines options de mise à jour d'enregistrement, de suppression d'enregistrements déjà existant, etc.....

  4. #4
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Ah ok j'ai compris! En fait ca ferait comme ca:
    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
    20
    21
    22
    23
    MemeLigne=Faux
    TQ (MemeLigne==Faux ET non-finDeTable) FRE
       /*si le champs de la 1ere col de la 1ere table est égal à celui de la 2ème table*/  
         SI (chp1==c1) ALORS
             SI (chp2==c2) ALORS
                SI (chp3==c3) ALORS
                   SI (chp4==c4) ALORS
                      MemeLigne=Vrai
                   SINON
                      MemeLigne=Faux
                   FSI
                SINON
                   MemeLigne=Faux
                FSI
             SINON
                MemeLigne=Faux
             FSI
          SINON
             MemeLigne=Faux
          FSI
          LECTURE LIGNE SUIVANTE
    FTQ
    RETOURNE (MemeLigne)
    Le problème c'est que je dois le faire sur une base de donnée Access!! Alors j'ai 2 options: ou je le fais avec VBA (Visual Basic Access, que je connais moyennement) ou je le fais en SQL (que je connais assès bien). Mais pour SQL il faudrait que j'utilise un curseur (ca vient d'ORACLE) pour appliquer cet algo, hors en SQL on peut pas faire de curseur!!!

    Donc, d'après vous quel serait le meilleur choix pour programmer cet algo? VBA que je maitrise moins bien que SQL mais qui me permettrait de pouvoir appliquer cet algo ou SQL que je connais mais qui va me donner des problème pour parcourir toute la table!

  5. #5
    Membre du Club
    Homme Profil pro
    Editeur
    Inscrit en
    Juillet 2002
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juillet 2002
    Messages : 39
    Points : 50
    Points
    50
    Par défaut
    t'imagine ton code si tu avais 50 champs dans chacune de tes tables !!!!! :o

  6. #6
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par lgirard
    est-ce que l'utilisation de BatchMove ne permet pas de faire des copies de tables, avec certaines options de mise à jour d'enregistrement, de suppression d'enregistrements déjà existant, etc.....
    Je sais pas! Je connais pas BatchMove mais ca m'interesse fortement ce que tu me dis!!! Peux-tu m'expliquer ce que c'est? Un fonction? Un prog?

  7. #7
    Inactif
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 97
    Points : 84
    Points
    84
    Par défaut Code
    C'est vrai que ton code n'est pas très optimisé

    Si j'étais toi, dans la proc, je ferais une boucle par indice pour le parcours de la table.

    Pour répondre à ta question, je le ferais en VBA car, comme tu viens de le signaler, le SQL standard ne te permet pas de le faire, et les curseurs, ben ça reste des curseurs

  8. #8
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par lgirard
    t'imagine ton code si tu avais 50 champs dans chacune de tes tables !!!!! :o
    Oops c'est vrai, j'y avais même pas pensé!! J'étais sur l'algo qui pourrait me donner des bons résultats et j'ai pas fais attention à ca !

  9. #9
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 88
    Points
    88
    Par défaut Re: Code
    Citation Envoyé par the_clansman
    Pour répondre à ta question, je le ferais en VBA car, comme tu viens de le signaler, le SQL standard ne te permet pas de le faire, et les curseurs, ben ça reste des curseurs
    Ok je pense aussi que ca serait mieux !
    Mais par-contre, en VB, moi j'ai toujours accédé aux colonnes en utilisant leur nom:
    Donc, comment puis-je faire avec un indice?

  10. #10
    Futur Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    En SQL tu peux faire :

    SELECT * FROM Table1
    UNION
    SELECT * FROM Table2


    En effet l'instruction UNION élimine les doublons...

    (Pour les conserver c'est UNION ALL)

    Reste ensuite à insérer cela dans la table résultat...

    (Voir si on ne peut pas utiliser INSERT INTO SELECT)

  11. #11
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Et ouai, c'est ca le gros problème !!!
    Je sais pas si je vai pas devoir utiliser du VBA pour que ca soit plus simple!

  12. #12
    Membre expérimenté Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Points : 1 539
    Points
    1 539
    Par défaut
    Citation Envoyé par copper
    En SQL tu peux faire :

    SELECT * FROM Table1
    UNION
    SELECT * FROM Table2


    En effet l'instruction UNION élimine les doublons...

    (Pour les conserver c'est UNION ALL)

    Reste ensuite à insérer cela dans la table résultat...

    (Voir si on ne peut pas utiliser INSERT INTO SELECT)
    Il me semble qu'il y a un truc en VBA pour enregistrer le résultat d'une requête comme ça, sous forme de table.

  13. #13
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    190
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2004
    Messages : 190
    Points : 88
    Points
    88
    Par défaut
    Ouai c'est les RECORDSET !

    Mais je pense que je vai le faire en avec VBA: Ca sera plus simple

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 24/06/2007, 01h13
  2. [WD10]Récupérer les coordonnées X,Y d'une ligne de table
    Par Louis Griffont dans le forum WinDev
    Réponses: 10
    Dernier message: 27/03/2007, 08h42
  3. Réponses: 2
    Dernier message: 12/05/2006, 08h35
  4. [MySQL] Éliminer les sauts de ligne
    Par hm19000 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/05/2006, 15h16
  5. Éliminer les lignes blanches dans un tableau
    Par DenPro dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/11/2004, 01h27

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