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

MS SQL Server Discussion :

comprarer deux tables


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Par défaut comprarer deux tables
    J'ai deux bases de données, qui ont la meme structure, et qui normalement doivent contenir les memes données, je veux faire une requete, qui nous returne ... si la ligne au niveau de BD1 differe de celle sur BD2 pour la meme clé.

    Comment puis je faire

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Avec EXCEPT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select col1, col2, col3...
      from dbo.MaTable1
    EXCEPT
    select col1, col2, col3...
      from dbo.MaTable2
    Puis dans l'autre sens !

  3. #3
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Par défaut
    a quoi sert le except ?

    Mais on doit speccifier sur quel colonne il va faire la comparaison, non ?

    cad : l'id de ligne 1 est 1 et celui de ligne 13 au niveau BD2 est 1, c'est la ou il va fairev la comparaison

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Par défaut
    Bonjour,

    EXCEPT retourne toute tuple distinct de la requête à gauche de l'EXCEPT mais non trouvé dans la requête à droite de l'EXCEPT.

    celui de ligne 13 au niveau BD2 est 1, c'est la ou il va fairev la
    Comment le déduisez-vous ?

    @++

  5. #5
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Par défaut
    c'est un exemple, cad il va chercher les lignes qui ont le meme id et il va les comparer

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 : 22 002
    Billets dans le blog
    6
    Par défaut
    Il n'y a pas de notion d'ID qui tienne. Il va chercher les lignes de l'une qui ne sont pas dans l'autre. Si tu veut être complet il faut faire un double except :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    (
    SELECT * FROM Matable1
    ECEPT 
    SELECT * FROM Matable2
    )
    UNION ALL
    (
    SELECT * FROM Matable2
    ECEPT 
    SELECT * FROM Matable1
    )
    En effet, l'EXCEPT étant une équivalence de la sosutraction ensembliste, il faut à la fois faire la soustraction dans un sens et dans l'autre pour trouver TOUTES les différences !

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE T1 (C1 INT, C2 INT)
     
    CREATE TABLE T2 (C1 INT, C2 INT)
     
    INSERT INTO T1 VALUES (1, 1)
    INSERT INTO T1 VALUES (1, 2)
    INSERT INTO T1 VALUES (2, 2)
     
    INSERT INTO T2 VALUES (1, 1)
    INSERT INTO T2 VALUES (1, 3)
    Soustraction de 2 dans 1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT * FROM T1
    EXCEPT
    SELECT * FROM T2
     
    C1          C2
    ----------- -----------
    1           2
    2           2
    Soustraction de 1 dans 2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT * FROM T2
    EXCEPT
    SELECT * FROM T1
     
    C1          C2
    ----------- -----------
    1           3
    La double différence par UNION ALL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT *
    FROM   (SELECT * FROM T1
            EXCEPT
            SELECT * FROM T2) AS T3
    UNION ALL
    SELECT *
    FROM   (SELECT * FROM T2
            EXCEPT
            SELECT * FROM T1) AS T4
    ou bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    (
    SELECT * FROM T1
    EXCEPT
    SELECT * FROM T2
    )
    UNION ALL
    (
    SELECT * FROM T2
    EXCEPT
    SELECT * FROM T1
    )
    Qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    C1          C2
    ----------- -----------
    1           2
    2           2
    1           3
    CQFD !

    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/ * * * * *

Discussions similaires

  1. Difference en tre deux table
    Par k-lendos dans le forum Langage SQL
    Réponses: 5
    Dernier message: 02/04/2004, 13h56
  2. comment lier deux tables?????
    Par baboune dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 16/03/2004, 14h45
  3. [Débutant] Union de deux tables
    Par nyarla01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/03/2004, 10h40
  4. 2 Count() sur deux tables en jointures gauches
    Par Alexandre T dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/09/2003, 16h53
  5. regrouper deux tables
    Par Shabata dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/05/2003, 15h02

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