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 :

[SQL2K][TSQL] Problème de NOT EXISTS


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 47
    Points : 38
    Points
    38
    Par défaut [SQL2K][TSQL] Problème de NOT EXISTS
    Bonjour à tous,

    Donc voilà, je souhaiterais obtenir tout les enregistrement présent dans ma table A qui ne sont pas dans ma table B.
    Ces tables ne sont pas sur la meme base (table A est sur la base1 et B et sur la base2) et n'ont pas de clé primaire. La table B et la réplique exact de ma table A (mis à part les données)

    J'ai écrit cette requête qui n'a pas l'air de fonctionner :
    SELECT *
    FROM base1.dbo.A
    WHERE (NOT EXISTS
    (SELECT *
    FROM base2.dbo.B))

    Ce qui est étrange c'est que lorsque je supprime le NOT la requête me retourne bien les enregistrement de ma table A qui sont présent dans ma table B. Mais moi c'est l'inverse que je veux...

    Moi pas comprendre ...
    Pitié Help !

    Merci à tout ceux qui prendront le temps de lire ce post
    ++

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Points : 1 619
    Points
    1 619
    Par défaut
    sans clé primaire il me semble que le EXISTS ne fonctionne. à confirmer.

  3. #3
    Membre actif Avatar de f_bobo
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Mai 2006
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 202
    Points : 281
    Points
    281
    Par défaut
    Salut,
    Essayes comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT     *
    FROM         base1.dbo.A A
    WHERE     (NOT EXISTS
                              (SELECT     *
                                FROM          base2.dbo.B B
    <div style="margin-left:40px">where A.champ1 = B.champ1</div><div style="margin-left:40px">and A.champ2 = B.champ2</div><div style="margin-left:40px">and etc</div>))
    Cordialement,

    Florent

    Je penche donc je suis...

  4. #4
    Nouveau membre du Club
    Inscrit en
    Septembre 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 47
    Points : 38
    Points
    38
    Par défaut
    @rattlehead : Je pense que le EXISTS fonctionne même sans clé primaire car quand j'enlève le NOT il me retourne des enregistrements correct.

    @f_bobo : Je viens de tester mais malheureusement cela ne fonctionne pas mieux. Fonctionne pas avec le NOT mais fonctionne sans le NOT ...

    Bizarre ...
    Merci de votre aide en tout cas.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 47
    Points : 38
    Points
    38
    Par défaut
    Hop rectification sur ce que j'ai dis :

    Meme en enlevant le NOT, ca ne fonctionne pas. en fait il me retourne tout mes enregistrements de ma table A ...

    Donc effectivement peut être que le EXISTS pose problème ...

  6. #6
    Nouveau membre du Club
    Inscrit en
    Septembre 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 47
    Points : 38
    Points
    38
    Par défaut
    Bon finalement j'ai trouvé une solution de rechange dans MSDN, c'est pas simple comme requête ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT     col1, col2, col3, col4, col5 etc ... 
    FROM         (SELECT DISTINCT 'U' AS setname, col1, col2, col3, col4, col5 etc..
                           FROM          base1.dbo.A
                           UNION ALL
                           SELECT DISTINCT NULL, col1, col2, col3, col4, col5 etc...
                           FROM         base2.dbo.B) D1
    GROUP BY col1, col2, col3, col4, col5
    HAVING      (COUNT(*) = 1) AND (MAX(setname) = 'U')
    Donc voilà c'est super bizarre comme requête...
    En Gros on unifie toute les lignes de la table A et B on groupe sur les champs des 2 tables et on affiche uniquement les lignes présentes 1 fois ...

    Ca marche, mais si quelqu'un à plus simple à proposer il est le bienvenue

    ++

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Points : 1 619
    Points
    1 619
    Par défaut
    et pourquoi tu ne mets pas de clé primaire?

  8. #8
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 47
    Points : 56
    Points
    56
    Par défaut
    bonjour

    pourquoi pas utiliser not in au lieu de not exists.
    vous avez dit que la tableA et la replique de la table B donc ils ont les même champs mais pas forcement le même contenu?

    je propose une requete plus simple:

    soit le champs col1 qui existe dans les deux tables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select col1 from
    base1.dbo.tableA 
    where col1 not in
     (select col1 from base2.dbo.tableB)
    simple je crois efficace

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

Discussions similaires

  1. Problème de not exists
    Par Naruto_kun dans le forum PL/SQL
    Réponses: 5
    Dernier message: 29/10/2009, 15h13
  2. Problème requête NOT EXISTS
    Par jbulysse dans le forum SQL
    Réponses: 3
    Dernier message: 04/08/2008, 11h22
  3. Problème pour la Division avec NOT EXISTS
    Par myzu69 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 08/11/2007, 14h50
  4. Réponses: 5
    Dernier message: 16/02/2007, 16h03
  5. Problème "The specified service does not exist as an ..
    Par Rimak2 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/05/2005, 21h24

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