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 et SQL. Discussion :

Requête inversée comment faire?


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2007
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 67
    Points : 29
    Points
    29
    Par défaut Requête inversée comment faire?
    Bonjour,

    J'ai actuellement 2 tables que je dois comparer suivant plusieurs champs.
    Voici la requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    SELECT [Suivi LAC_Dav].[Ref LAC]
         , [Suivi LAC_Dav].Nom
         , [Suivi LAC_Dav].Facturé
         , [Suivi LAC_Mantis].[Ref LAC]
         , [Suivi LAC_Mantis].Nom
         , [Suivi LAC_Mantis].Facturé
     
    FROM [Suivi LAC_Dav] INNER JOIN [Suivi LAC_Mantis] 
                         ON ([Suivi LAC_Dav].Priorité = [Suivi LAC_Mantis].Priorité) 
                         AND ([Suivi LAC_Dav].Facturé = [Suivi LAC_Mantis].Facturé) 
                         AND ([Suivi LAC_Dav].Nom = [Suivi LAC_Mantis].Nom) 
                         AND ([Suivi LAC_Dav].[Ref LAC] = [Suivi LAC_Mantis].[Ref LAC]) 
                         AND ([Suivi LAC_Dav].[date réception LAC] = [Suivi LAC_Mantis].[Date Réception LAC]) 
                         AND ([Suivi LAC_Dav].[Date d'envoi pour validation EDS] = [Suivi LAC_Mantis].[Date d'envoi pour validation EDS]) 
                         AND ([Suivi LAC_Dav].[Date de réception validation EDS] = [Suivi LAC_Mantis].[Date de réception validation EDS]) 
                         AND ([Suivi LAC_Dav].[Nb jours] = [Suivi LAC_Mantis].[Nb jours])
     
    GROUP BY [Suivi LAC_Dav].[Ref LAC]
            , [Suivi LAC_Dav].Nom
            , [Suivi LAC_Dav].Facturé
            , [Suivi LAC_Mantis].[Ref LAC]
            , [Suivi LAC_Mantis].Nom
            , [Suivi LAC_Mantis].Facturé;

    Affichage en SQL mais je ne suis pas un expert.
    Donc cela affiche les résultats des enregistrements qui sont identiques entre les 2 tables suivants les différents champs.

    Comment faire la même chose mais cette fois ci pour afficher justement les enregistrement qui ne sont pas identiques.

    Merci

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Je suis assez surpris par la "physionomie" de ta requête initiale.

    Pourquoi ?
    J'imagine que les tables ont en commun le champ clé [Ref LAC].
    Donc la jointure devrait simplement porter sur le champ clé, le reste va dans la clause WHERE pour définir des critères de sélection

    (question en passant: ici, dans ta requête, la clause GROUP BY a-t-elle vraiment une utilité ?)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    SELECT [Suivi LAC_Dav].[Ref LAC]
         , [Suivi LAC_Dav].Nom
         , [Suivi LAC_Dav].Facturé
         , [Suivi LAC_Mantis].[Ref LAC]
         , [Suivi LAC_Mantis].Nom
         , [Suivi LAC_Mantis].Facturé
     
    FROM [Suivi LAC_Dav] INNER JOIN [Suivi LAC_Mantis] 
         ON ([Suivi LAC_Dav].[Ref LAC] = [Suivi LAC_Mantis].[Ref LAC]) 
     
    WHERE ([Suivi LAC_Dav].Priorité = [Suivi LAC_Mantis].Priorité) 
         AND ([Suivi LAC_Dav].Facturé = [Suivi LAC_Mantis].Facturé) 
         AND ([Suivi LAC_Dav].Nom = [Suivi LAC_Mantis].Nom) 
         AND ([Suivi LAC_Dav].[date réception LAC] = [Suivi LAC_Mantis].[Date Réception LAC]) 
         AND ([Suivi LAC_Dav].[Date d'envoi pour validation EDS] = [Suivi LAC_Mantis].[Date d'envoi pour validation EDS]) 
         AND ([Suivi LAC_Dav].[Date de réception validation EDS] = [Suivi LAC_Mantis].[Date de réception validation EDS]) 
         AND ([Suivi LAC_Dav].[Nb jours] = [Suivi LAC_Mantis].[Nb jours])
     
    GROUP BY [Suivi LAC_Dav].[Ref LAC]
            , [Suivi LAC_Dav].Nom
            , [Suivi LAC_Dav].Facturé
            , [Suivi LAC_Mantis].[Ref LAC]
            , [Suivi LAC_Mantis].Nom
            , [Suivi LAC_Mantis].Facturé;
    Une fois ceci posé, on peut passer à ta question.

    Citation Envoyé par rjcab Voir le message
    Donc cela affiche les résultats des enregistrements qui sont identiques entre les 2 tables suivants les différents champs.

    Comment faire la même chose mais cette fois ci pour afficher justement les enregistrement qui ne sont pas identiques.
    Voilà une proposition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    SELECT [Suivi LAC_Dav].[Ref LAC]
         , [Suivi LAC_Dav].Nom
         , [Suivi LAC_Dav].Facturé
         , [Suivi LAC_Mantis].[Ref LAC]
         , [Suivi LAC_Mantis].Nom
         , [Suivi LAC_Mantis].Facturé
     
    FROM [Suivi LAC_Dav] INNER JOIN [Suivi LAC_Mantis] 
         ON ([Suivi LAC_Dav].[Ref LAC] = [Suivi LAC_Mantis].[Ref LAC]) 
     
    WHERE ([Suivi LAC_Dav].Priorité <> [Suivi LAC_Mantis].Priorité) 
         OR ([Suivi LAC_Dav].Facturé <> [Suivi LAC_Mantis].Facturé) 
         OR ([Suivi LAC_Dav].Nom <> [Suivi LAC_Mantis].Nom) 
         OR ([Suivi LAC_Dav].[date réception LAC] <> [Suivi LAC_Mantis].[Date Réception LAC]) 
         OR ([Suivi LAC_Dav].[Date d'envoi pour validation EDS] <> [Suivi LAC_Mantis].[Date d'envoi pour validation EDS]) 
         OR ([Suivi LAC_Dav].[Date de réception validation EDS] = [Suivi LAC_Mantis].[Date de réception validation EDS]) 
         OR ([Suivi LAC_Dav].[Nb jours] <> [Suivi LAC_Mantis].[Nb jours])
     
    GROUP BY [Suivi LAC_Dav].[Ref LAC]
            , [Suivi LAC_Dav].Nom
            , [Suivi LAC_Dav].Facturé
            , [Suivi LAC_Mantis].[Ref LAC]
            , [Suivi LAC_Mantis].Nom
            , [Suivi LAC_Mantis].Facturé;
    J'espère que je n'ai pas fait trop d'erreurs de frappe ou de copier/coller.
    _

Discussions similaires

  1. Geocodage inverse : comment faire ou "je deviens fou !"
    Par saxrub dans le forum IGN API Géoportail
    Réponses: 7
    Dernier message: 30/06/2015, 19h42
  2. Requête DISTINCT comment faire?
    Par Dr_No dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 31/03/2015, 17h51
  3. Requête particulière, comment faire ?
    Par Sanceray3 dans le forum Requêtes
    Réponses: 4
    Dernier message: 28/10/2010, 11h16
  4. [MySQL] Requête Mysql comment faire ?
    Par gerlougir dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 27/05/2007, 11h29
  5. Requêtes web: comment faire ?
    Par requin01 dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 21/05/2006, 20h08

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