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 :

Obtenir les éléments d'une table absents d'une autre


Sujet :

Langage SQL

  1. #1
    Inactif  
    Profil pro
    Inscrit en
    Février 2003
    Messages
    4 341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 4 341
    Points : 5 953
    Points
    5 953
    Par défaut Obtenir les éléments d'une table absents d'une autre
    Bonjour,

    Je ne suis pas un pro SQL, et là je voudrais faire un truc, mais je ne vois pas comment m'y prendre.

    J'ai 2 tables TABLE1 et TABLE2 ayant chacune un certains nombre de champs, dont 3 en particuliers qui sont communs (Champ1, Champ2 et Champ3).

    Je voudrais récupérer la liste des éléments de Table1 ayant Champ1 et Champ2 définis et dons les Champ3 ne sont pas dans Table2.

    Ex TABLE1 (AAA, BBB, CCC); (AAA, BBB, CCD); (AAA, BBC, CCC)
    TABLE2 (AAA, BBB, CCD); (AAA, BBC, CCC)

    avec la requête (AAA et BBB pour champ1 et Champ 2, je devrais récupérer CCC

    Suis-je clair ? Si oui, avez-vous une idée de comment faire ? Si non, dites-moi ce que qui n'est pas clair, j'essaierais de mieux expliquer !

  2. #2
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    Bonjour,

    Je ne suis pas sûr d'avoir tout compris, mais voilà ce que je ferai :

    Attention, ma solution est valable sous Oracle, postgrSQL Paradox et interbase. Si vous n'utilisez pas un de ces SGBD, merci de préciser le votre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT table1.champ3
    FROM table1, table2
    WHERE table1.champ1||table1.champ2 = table2.champ1||table2.champ2
      AND table1.champ3<>table2.champ3
    Cordialement,

    Arkhena

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Février 2003
    Messages
    4 341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 4 341
    Points : 5 953
    Points
    5 953
    Par défaut
    Merci de ta réponse.

    La base est ACCESS (je sais c'est pas top, mais c'est pas moi qui décide)

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Tu veux les lignes où champ1 et champ2 sont identiques dans les deux tables et où champ3 est différent dans les deux tables ?
    Une simple jointure devrait suffire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM table1 AS t1
    INNER JOIN table2 AS t2 ON t1.champ1 = t2.champ1 AND t1.champ2 = t2.champ2
    WHERE t1.champ3 <> t2.champ3

  5. #5
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Tu veux les lignes où champ1 et champ2 sont identiques dans les deux tables et où champ3 est différent dans les deux tables ?
    Une simple jointure devrait suffire :

    Ohlàlà, c'est pas si bon que ça les vacances!

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Février 2003
    Messages
    4 341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 4 341
    Points : 5 953
    Points
    5 953
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Tu veux les lignes où champ1 et champ2 sont identiques dans les deux tables et où champ3 est différent dans les deux tables ?
    Une simple jointure devrait suffire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM table1 AS t1
    INNER JOIN table2 AS t2 ON t1.champ1 = t2.champ1 AND t1.champ2 = t2.champ2
    WHERE t1.champ3 <> t2.champ3
    Pas tout à fait !
    Je veux les lignes de Table1 ou champ1 et champ2 ont une valeur précises pour lesquelles le "triplon" champ1, champ2 et champ3 n'existe pas dans table2.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 244
    Points : 12 878
    Points
    12 878
    Par défaut
    Bonjour,
    Je vois deux solutions:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select champ1,champ2,champ3
    from table 1
    where champ1 = 'AAA' and champ2 = 'BBB' 
    and not exists(select * from table2 
    where table2.champ1 = table1.champ1 
    and table2.champ2 = table1.champ2 
    and table1.champ3 = table2.champ3)

    Ou alors
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select champ1,champ2,champ3 from table1 where champ1 = 'AAA' and champ2 = 'BBB'
    except
    select champ1,champ2,champ3 from table2 where champ1 = 'AAA' and champ2 = 'BBB'

    Tatayo

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Louis Griffont Voir le message
    Pas tout à fait !
    Je veux les lignes de Table1 ou champ1 et champ2 ont une valeur précises pour lesquelles le "triplon" champ1, champ2 et champ3 n'existe pas dans table2.
    Tu veux dire le triplet (champ1, champ2, champ3) de table1 n'existe pas dans table 2 pour une valeur précise du doublon (champ1, champ2) ?
    En utilisant une jointure externe ça devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT t1.champ1, t2.champ2, t3.champ3
    FROM table1 AS t1
    LEFT OUTER JOIN table2 AS t2
      ON t1.champ1 = t2.champ1
        AND t1.champ2 = t2.champ2
        AND t1.champ3 = t2.champ3
    WHERE t1.champ1 = 'valeur1'
      AND t1.champ2 = 'valeur2'
      AND t2.champ3 IS NULL

  9. #9
    Inactif  
    Profil pro
    Inscrit en
    Février 2003
    Messages
    4 341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 4 341
    Points : 5 953
    Points
    5 953
    Par défaut
    Merci à tous.

    Après de multiple essais en m'inspirant de vos suggestions j'ai fait ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select champ3 from table1 where champ1=mavaleur1 and 
    champ2=mavaleur2 and champ3 not in (select champ3 from table2 where 
    champ1=mavaleur1 and champ2=mavaleur2)
    Et ça marche !

Discussions similaires

  1. [AC-2010] insert into pour envoyer les donnees d'une table Access vers une table Mysql
    Par jj4822 dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 01/12/2014, 11h12
  2. Sélectionner une donnée absente d'une table
    Par Nicourpasanraison dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/10/2013, 12h30
  3. Comment rechercher une valeur absente dans une table
    Par Jacno61 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 24/02/2013, 09h32
  4. Réponses: 6
    Dernier message: 16/06/2006, 13h22
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/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