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

Requêtes MySQL Discussion :

Comparer 2 tables de structure identique.


Sujet :

Requêtes MySQL

  1. #1
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut Comparer 2 tables de structure identique.
    Bonjour,

    J'ai 2 tables avec plus ou moins 10 200 000 enregistrements chaqu'une.
    Les 2 tables ont la même structure

    La table "avant" est la table correcte
    La table "apres" à perdu quelques enregistrement (entre 5000 et 10 000)

    Comment puis-je trouver Quel sont les enregistrement présent dans la table "avant" qui ne sont plus existant dans la table "apres" ?

    Merci !

  2. #2
    Membre actif
    Inscrit en
    Septembre 2005
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 185
    Points : 220
    Points
    220
    Par défaut
    une jointure LEFT ou RIGHT OUTER te guidera

  3. #3
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    Je connais ces jointure, mais je n'ai pas trop d'idée comment faire.
    Je suis capable de sélectionner les lignes ou il y a correspondance, mais comment faire lorsqu'il n'y en a pas (sans sélectionner toutes les lignes sauf celle qui correspond, ce qui est la problématique en fait.)


    La structure de mes tables est très simple:
    champs:
    - tab
    - fiche
    - ordre
    - local

  4. #4
    Membre actif
    Inscrit en
    Septembre 2005
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 185
    Points : 220
    Points
    220
    Par défaut
    Pour être plus précis essaye kelke chose du genre
    table a = table avant
    table b = table après

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT 
    *.a , *.b  FROM table a  LEFT OUTER JOIN table b  ON  a.même_ID = b.même_ID
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT 
    *.a , *.b  FROM table a RIGHT OUTER JOIN table b  ON  a.même_ID = b.même_ID

  5. #5
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    Ces requête vont me sortir les lignes qui sont étaient dans la table "avant" et qui le sont toujours dans la table "apres" non ?


    Moi je veux savoir les lignes qui ont été PERDUS. Les lignes de la table "avant" qui ne se retrouve PAS dans la table "apres".


    J'ai mal compris les requêtes ?

  6. #6
    Membre actif
    Inscrit en
    Septembre 2005
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 185
    Points : 220
    Points
    220
    Par défaut
    Slt FMaz, ces requetes te donnent la solution à ton problème. les lignes qui ont été effacees auront pour valeur NULL. il te sera alors facile de leur identifié a partir de leur ID puisqu'il est identique pour chacune des tables.
    j'espère bien que c'est bien ce que tu veux.

  7. #7
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    Ha ok, donc j'ai ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT a.*, b.* 
    FROM avant as a
    RIGHT OUTER JOIN apres as b
    ON  (a.tab=b.tab AND a.fiche=b.fiche AND a.ordre=b.ordre AND a.`local`=b.`local`)
    Est-ce que ca va me sortir les lignes de la table "avant" qui sont introuvable dans la table "apres" ou les lignes de la table "apres" qui sont introuvable dans la table "avant" ?

    Comment je peux faire afficher seulement le # de fiche de la table "avant" qui n'a pas de correspondance (selon les 4 paramètres) dans la table "apres" ?


    Merci beaucoup de ton coup de pouce

  8. #8
    Membre actif
    Inscrit en
    Septembre 2005
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 185
    Points : 220
    Points
    220
    Par défaut
    slt FMaz,
    après reflexion voiçi ce que je te propose de nouveau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM tableB where Clé NOT IN (SELECT Clé FROM tableA)
    Les jointures compliquent la tache.

  9. #9
    Membre actif
    Inscrit en
    Septembre 2005
    Messages
    185
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 185
    Points : 220
    Points
    220
    Par défaut
    Un detail y a aussi la possibilité d'utiliser enfin je crois mais
    suis pas trop sure .

  10. #10
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    Pour établir une ligne manquante, je doit vérifier les 4 champs (il s'agit d'une table de liaison)


    Et avec cette méthode, ca demande donc de faire:
    10 200 000 ^ ( 10 200 000 *4 ) requêtes.

    MySQL s'en sortira jamais :-\

  11. #11
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Pour compléter ce qui a été dit auparavent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT apres.*
    FROM apres
    LEFT OUTER JOIN  avant
    USING  (tab, fiche, ordre, `local`)
     
    WHERE avant.tab IS NULL
    Pour avoir juste les lignes ajoutées

  12. #12
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    ... Je veux les lignes qui ont été PERDUES !!!!

    Donc la requête serait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT avant.*
    FROM apres
    LEFT OUTER JOIN  avant
    USING  (tab, fiche, ordre, `local`)
     
    WHERE avant.tab IS NULL
    ??

  13. #13
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par FMaz
    ... Je veux les lignes qui ont été PERDUES !!!
    Ok, j'avais pas tout compris.

    Dans ce cas, c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT avant.*
    FROM avant
    LEFT OUTER JOIN apres
    USING  (tab, fiche, ordre, `local`)
     
    WHERE apres.tab IS NULL

  14. #14
    Membre confirmé
    Avatar de FMaz
    Inscrit en
    Mars 2005
    Messages
    643
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 643
    Points : 640
    Points
    640
    Par défaut
    (test en cours...)

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 19/11/2014, 14h08
  2. Créer table vide : structure identique à une autre table
    Par marlene2110 dans le forum SAS Base
    Réponses: 2
    Dernier message: 11/04/2012, 15h54
  3. 3 tables dont deux de structure identique, et des COUNT
    Par npopravka dans le forum Langage SQL
    Réponses: 6
    Dernier message: 17/02/2010, 10h35
  4. copier plisieurs tables de structure identique vers une seule
    Par adelsunwind dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 30/03/2009, 16h16
  5. "Merge" de deux tables à structure identiques
    Par jcachico dans le forum Requêtes
    Réponses: 7
    Dernier message: 09/06/2006, 14h11

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