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 :

[SQL Server] comparaison de 2 tables


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 111
    Points : 119
    Points
    119
    Par défaut [SQL Server] comparaison de 2 tables
    Bonjour,

    j'essaie de comparer le resultat de 2 tables pour voir quelles sont les lignes n'apparaissant que sur l'une des bases. Les 2 tables ont la meme structure.

    Au debut, je pensait a un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select id, name 
    from table1
    where not in 
    ( select id, name from table2)
    Le probleme, c'est qu'on ne peut donner qu'une colonne pour le "not in" et pas plusieures. Mais comme je ne connais pas la ou les cle primaires, j'aimerai tester sur l'ensemble de la ligne.

    Quelqu'un aurait il une idee ?

  2. #2
    Membre éprouvé
    Avatar de HULK
    Inscrit en
    Juillet 2003
    Messages
    1 276
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 276
    Points : 1 281
    Points
    1 281
    Par défaut
    utilise un WHERE NOT EXISTS, ca doit etre comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select id, name 
    from table1
    where not exists 
    ( select id, name from table2)

  3. #3
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Pourquoi ne pas utiliser EXCEPT ? http://sql.developpez.com/sqlaz/ensembles/#L3.5.2

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 111
    Points : 119
    Points
    119
    Par défaut
    Tout d'abord merci

    Avec le not exists, ca ne fonctionne pas car la condition : select id, name form table2 est toujours vrai (il suffit qu'il trouve une ligne) donc il ne renvoie rien.

    Je vais tester avec except

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 111
    Points : 119
    Points
    119
    Par défaut
    j'utilise SQL server 2000 et apparement, le "except" n'existe pas. Dommage, ca avait l'air tres prometteur. Bon, je vais essayer avec des jointures...

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 111
    Points : 119
    Points
    119
    Par défaut
    Ca a l'air de donner quelque chose avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT T1.id, T1.name
    FROM   table1 T1
           LEFT OUTER JOIN table2 T2
                ON T1.id = T2.id and T1.name = T2.name
    GROUP BY T1.id, T1.name
    HAVING COUNT(T2.id) = 0
    and COUNT(T2.name) = 0
    Bon, je croise les doigts...

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 111
    Points : 119
    Points
    119
    Par défaut
    ca fonctionne donc et la solution de Hulk avec la not exists de meme.

    Un petit ennui cependant, si l'une des valeurs d'un des champs est nulle, la comparaison n'est plus possible.

    Il suffit alors de rajouter NVL sous oracle ou ISNULL sous SQLServer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT *
    FROM table1 T1 
    WHERE NOT EXISTS (
         select 1 from table2 T2
         where 	ISNULL(T1.id,'NULL')=ISNULL(T2.id,'NULL')
                 	And ISNULL(T1.name,'NULL')=ISNULL(T2.name,'NULL')
    )

  8. #8
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Id n'est pas la clé de ces tables ?

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 111
    Points : 119
    Points
    119
    Par défaut
    Si, mais comme je genere ces scripts automatiquement, je ne sais pas quelles sont les cle a l'avance.

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

Discussions similaires

  1. [SQL Server 2005] création de table
    Par LeNeutrino dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 15/11/2006, 14h38
  2. [SQL Server] Filtré sur une table avant une jointure externe
    Par TangoZoulou dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/11/2006, 15h52
  3. [SQL Server 2000] Verrouiller une table
    Par Matth_S dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 28/10/2006, 14h34
  4. [SQL Server] Jointure entre 2 tables et performances
    Par rmeuser dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/04/2006, 10h12
  5. [SQL Server 2k] Droits utilisateurs + tables système
    Par guignol dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 05/07/2004, 09h12

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