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 :

En SQL, soustraire deux tables mais selon 3 identifiants


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Analyste
    Inscrit en
    Juillet 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyste
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2011
    Messages : 9
    Points : 16
    Points
    16
    Par défaut En SQL, soustraire deux tables mais selon 3 identifiants
    Bonjour,

    Je ne savais pas commet libeller mon intitulé.
    J'ai vu beaucoup de chose expliquant comment soustraire deux tables en SQL mais à chaque fois ça fait référence à un seul identifiant or dans mon cas, mon identifiant est composé de 3 champ
    J'illustre :
    table1 : dept, poste, compte, montantdu
    table2 : dept, poste, compte, actionbloquante

    Je souhaite créer une troisième table qui reprend tous les articles de la table 1 qui ne sont pas dans la table 2.
    Mais attention l'identification se fait obligatoirement par le triplet (dept, poste, compte).

    J'ai tenté ça mais ça le résultat n'est pas bon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    create table3
    select * 
    from table1
    where ('dept','poste','fip') not in (select dept, poste, fip from table2).
    Il y a aussi la possibilité du left join mais je bloque sur quel identfiant mettre égal à null.

    Merci beaucoup par avance pour votre aide !!

    Merci pour votre aide.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    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 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    La jointure externe est une bonne piste. Pour ce qui doit "être mis à null" dans le where, je dirai n'importe quelle colonne de la table2 qui ne peut pas être null. Donc ici dep, post ou fip font de bons candidats.

    Si tu nous montres ta requête avec la jointure externe, on pourra peut-être t'aider à la corriger le cas échéant.

    Tatayo.

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Pourquoi mettre les noms de colonnes entre guillemets ? Cela en fait des chaines, qui ont fort peu de chances de se trouver dans les données
    Comme cela ça fonctionnera sans doute mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT  * 
    FROM    table1
    WHERE   (   dept
            ,   poste
            ,   fip
            )   NOT IN 
            (   SELECT  dept
                    ,   poste
                    ,   fip 
                FROM    table2
            )
    Ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT  * 
    FROM    table1  tb1
    WHERE   NOT EXISTS 
            (   SELECT  NULL   
                FROM    table2  tb2
                WHERE   tb1.dept    = tb2.dept
                    AND tb1.poste   = tb2.poste
                    AND tb1.fip     = tb2.fip
            )
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT  * 
    FROM    table1  tb1
        LEFT JOIN
            table2  tb2
            ON  tb1.dept    = tb2.dept
            AND tb1.poste   = tb2.poste
            AND tb1.fip     = tb2.fip
    WHERE   tb2.dept    IS NULL
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Membre à l'essai
    Profil pro
    Analyste
    Inscrit en
    Juillet 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyste
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2011
    Messages : 9
    Points : 16
    Points
    16
    Par défaut solution trouvée
    Ah j'ai fini par trouver, je le mets si qqun a besoin :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    create table table3
    SELECT Table1.nom, Table1.prenom
    FROM Table1 LEFT JOIN Table2 ON Table1.prenom = Table2.prenom AND Table1.nom = Table2.nom
    WHERE Table2.nom Is Null AND Table2.prenom Is Null

    ça marche avec 2 champs, j'ai testé avec des doublons de noms, donc ça devrait marcher avec 3 !!

  5. #5
    Membre à l'essai
    Profil pro
    Analyste
    Inscrit en
    Juillet 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Analyste
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2011
    Messages : 9
    Points : 16
    Points
    16
    Par défaut Merci !
    Ah merci pour vos message, ça me donne effectivement plusieurs pistes !

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

Discussions similaires

  1. [SQL] fusionner deux tables
    Par laloupiote dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 08/04/2008, 11h02
  2. Requête sql entre deux tables
    Par jojo86 dans le forum Bases de données
    Réponses: 3
    Dernier message: 15/02/2008, 19h19
  3. Requete SQL sur deux tables
    Par sat83 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/10/2007, 10h12
  4. Requette SQL entre deux tables !
    Par younes371 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 08/01/2007, 15h57
  5. [SQL] Problème avec script de pagination et requête sql sur deux tables
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/06/2006, 14h06

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