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 :

Comparer deux ensembles de données


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Points : 144
    Points
    144
    Par défaut Comparer deux ensembles de données
    Bonjour.
    J'ai deux tables dont je voudrais comparer le contenu, à la façon de sqlDiff (si vous connaissez)

    Table1:
    Champ1 varchar(50)
    Champ2 varchar(50)
    ValeurNum float

    Table2:
    Champ1 varchar(50)
    Champ2 varchar(50)
    ValeurNum float



    Je voudrais pouvoir sortir:
    1) les lignes donde la valeurNum a changé
    2) les lignes présentes dans table1 et pas dans Table2
    3) les lignes présentes dans table2 et pas dans Table1

    est ce possible en une fois?
    Et/ou d'une manière élégante?

    Je cherche depuis un moment mais je ne m'en sors pas!!!

    Merci de votre aide

  2. #2
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Bonjour,

    Tu pourrais peut-être répondre à certaines de tes questions avec les opérateurs ensemblistes.

  3. #3
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 034
    Points : 23 779
    Points
    23 779
    Par défaut
    Bonjour,

    1/ quel est ton SGBD ?
    2/ quelle est la clé primaire de ces tables ?

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Points : 144
    Points
    144
    Par défaut Réponses
    Merci de votre intérêt.
    Je suis allé voir la page web, j'ai réussi a faire 2 ou 3 trucs avec intersect. Je vais continuer cet après midi (j'habite au pérou, c'est pas le même après midi que vous)

    1/ quel est ton SGBD ?
    SQLServer 2000 ET 2008 (bientôt uniquement 2008). J'ai vu que les deux versions ont un comportement différent avec le mot clé INTERSECT. Donc assumons que j'ai la version 2008
    2/ quelle est la clé primaire de ces tables ?
    Il n'y a pas de clé commune.
    Pour table1, la clé est Champ1 et Champ2
    Pour table2, la clé est Champ1 et Champ2 aussi

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    Pour les questions 2) et 3), regarde du côté de MINUS plutôt que INTERSECT.

    Pour la 1), fais une jointure entre tes deux tables sur champ1 et champ2, puis une clause WHERE Table1.ValeurNum <> Table2.ValeurNum.

  6. #6
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Points : 144
    Points
    144
    Par défaut MINUS
    Minus n'existe pas sous MSsqlserver.
    L'équivalent serait un NOT IN mais je ne sais pas si je peux l'implémenter sur 2 champs (je suis clair?)

  7. #7
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Bonjour,

    tu dois faire la différence entre tes tables pour les questions 2 et 3 et non pas l'intersection.

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Citation Envoyé par sbeu Voir le message
    Minus n'existe pas sous MSsqlserver.
    L'équivalent serait un NOT IN mais je ne sais pas si je peux l'implémenter sur 2 champs (je suis clair?)
    L'équivalent sous SQL-Server est EXCEPT.
    C'est d'ailleurs le mot clef spécifié dans la norme SQL.

  9. #9
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut,

    Pas sûr d'être en phase avec ta demande, mais je dirais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT *
    FROM Table1 a 
      FULL OUTER JOIN Table2 b ON a.champ1=b.champ1 AND a.champ2 = b.champ2
    WHERE (a.ValeurNum IS NULL AND b.ValeurNum IS NOT NULL)
      OR (b.ValeurNum IS NULL AND a.ValeurNum IS NOT NULL)
      OR a.ValeurNum <> b.ValeurNum
    Ensuite, tu peux reconnaître les lignes manquantes selon si le champ1 est null dans l'un ou dans l'autre.

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    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 849
    Points : 52 978
    Points
    52 978
    Billets dans le blog
    6
    Par défaut
    Si les clefs ne sont pas communes, alors la seule manière est de faire un EXCEPT sur toutes les colonnes sauf celle de la clef.
    En gros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT COL3, COL4... , 'Différence 1 - 2' AS DIFF
    FROM  T1
    EXCEPT
    SELECT COL3, COL4... , 'Différence 1 - 2' AS DIFF
    FROM  T2
    UNION ALL
    SELECT COL3, COL4... , 'Différence 2 - 1' AS DIFF
    FROM  T2
    EXCEPT
    SELECT COL3, COL4... , 'Différence 2 - 1' AS DIFF
    FROM  T1
    A +

  11. #11
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 147
    Points : 144
    Points
    144
    Par défaut Merci!
    Merci de votre aide les gars, désolé de ne répondre que maintenant

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

Discussions similaires

  1. [XL-2010] Comparer deux bases de données pour en créer une troisième
    Par Xaphalys dans le forum Excel
    Réponses: 5
    Dernier message: 24/07/2014, 13h24
  2. [Vxi3] Comparer deux fournisseurs de données
    Par djam21 dans le forum Webi
    Réponses: 5
    Dernier message: 23/02/2012, 17h38
  3. [Google Maps] Utiliser le MarkerClusterer pour deux ensembles de données
    Par abel.ludba dans le forum APIs Google
    Réponses: 6
    Dernier message: 12/11/2011, 03h46
  4. impression de deux ensemble de données
    Par soft_balade dans le forum QuickReport
    Réponses: 4
    Dernier message: 21/02/2011, 20h14
  5. Comparer deux base de données
    Par adrienfehr dans le forum Modélisation
    Réponses: 4
    Dernier message: 01/04/2010, 07h23

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