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 :

[SGBD]Afficher les associations qui existent l'année N mais pas en N-1


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 59
    Par défaut [SGBD]Afficher les associations qui existent l'année N mais pas en N-1
    Bonjour à tous,

    Je possède une table nommée formation_metier dans laquelle sont stockées des associations entre un employé et une formation. Ainsi pour un employé, une formation et une année donnés, je possède ou non une association.

    A l'aide d'une requête, je souhaiterai pouvoir récupérer les associations existantes pour une année mais qui n'existe pas pour l'année précédente.

    Exemple :

    Afficher uniquement les associations qui existent en 2007 et qui n'existent pas 2006.

    Je pense à une autojointure mais je ne sais pas trop comment m'y prendre.

    J'ai pensé à un truc du genre :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT fme1.*
    FROM (formation_metier fme1 LEFT JOIN formation_metier fme2 ON fme1.id_formation = fme2.id_formation AND fme1.id_employe = fme2.id_employe)
    WHERE fme1.id_employe = '$id_employe'
    AND fme1.id_formation = '$id_formation'
    AND fme1.annee = '2007'
    AND fme2.annee = '2006'
    AND ISNULL(fme2.annee)

    Evidemment ça ne marche pas, pouvez-vous m'aider ?
    Merci par avance

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Par défaut
    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT fme1.*
    FROM formation_metier fme1
     LEFT JOIN formation_metier fme2
      ON fme1.id_formation = fme2.id_formation
       AND fme1.id_employe = fme2.id_employe
    WHERE fme1.id_employe = '$id_employe'
    AND fme1.id_formation = '$id_formation'
    AND fme1.annee = '2007'
    AND fme2.annee != '2006'
    On sélectionne toutes les formations de 2007 pour lesquelles la formation n'existe pas en 2006.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 59
    Par défaut
    C'est pas bon car s'il existe des associations pour des années autres que l'année passée, il y a des résultats.

    Je ne m'intéresse qu'à l'année précédente.

    Pour résumer, si pas d'association l'année passée, j'affiche l'association de l'année courante, sinon je n'affiche rien.

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Par défaut
    Exemple :
    Afficher uniquement les associations qui existent en 2007 et qui n'existent pas 2006
    Pour les résultats que la requête affiche :
    Est-ce qu'ils apparaissent en 2007 ?
    - normalement oui
    Est-ce qu'ils apparaissent en 2006 ?
    - normalement non

    N'est-ce pas le comportement que tu attendait ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT DISTINCT fme1.id_formation,fme1.id_employe
    FROM formation_metier fme1
     LEFT JOIN formation_metier fme2
      ON fme1.id_formation = fme2.id_formation
       AND fme1.id_employe = fme2.id_employe
    WHERE fme1.id_employe = '$id_employe'
    AND fme1.id_formation = '$id_formation'
    AND fme1.annee = '2007'
    AND fme2.annee != '2006'

  5. #5
    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
    Par défaut
    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT DISTINCT fme1.id_formation,fme1.id_employe
    FROM formation_metier fme1 
         LEFT JOIN formation_metier fme2 ON fme1.id_formation = fme2.id_formation
                                        AND fme1.id_employe = fme2.id_employe
                                        AND fme2.annee = '2006'
    WHERE fme1.id_employe = '$id_employe'
      AND fme1.id_formation = '$id_formation'
      AND fme1.annee = '2007'
      AND fme2.id_employe IS NULL

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Par défaut
    Médiat :
    Normalement, chaque enregistrement de formation_metier concerne une formation et un employé, et ce une année donnée.
    Il ne peut donc pas y avoir d'enregistrement où id_employé est NULL.

    Avec fme2.annee = '2006', tu joint les enregistrement où l'année est 2006,
    Hors, orus8 a écrit :
    Exemple :
    Afficher uniquement les associations qui existent en 2007 et qui n'existent pas 2006

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

Discussions similaires

  1. Afficher les liens qui n'existent pas
    Par engi dans le forum Langage SQL
    Réponses: 5
    Dernier message: 16/10/2008, 20h37
  2. Réponses: 6
    Dernier message: 03/07/2007, 10h34
  3. Réponses: 1
    Dernier message: 15/04/2007, 20h09
  4. Réponses: 3
    Dernier message: 26/07/2006, 20h41
  5. connaitre les bases qui existes
    Par nycagi dans le forum Administration
    Réponses: 13
    Dernier message: 08/06/2004, 12h29

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