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 :

requete multi table


Sujet :

Requêtes et SQL.

  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut requete multi table
    salut

    j'ai trois tables: tbEmploye, tbCirculaire, lienCirculaireEmploye

    tbEmploye
    - empID
    - empPrenom
    - empNom
    - empNumeroEmploye
    - empMotPasse

    tbCirculaire
    - cirID
    - cirNumero
    - cirDescription
    - cirDate
    - cirNomFichier


    lienCirculaireEmploye
    - cirNumero
    - empNumeroEmploye
    - dateLecture

    si un employe lie un circulaire, on insère les données nécessaire dans la table: lienCirculaireEmploye

    les info de la table tbCirculaire
    cirNumero cirDescription cirDate cirNomFichier
    1 test1 2006-12-10 2006-12-10.txt
    2 test2 2006-12-11 2006-12-11.txt
    3 test3 2006-12-12 2006-12-12.txt
    4 test4 2006-12-13 2006-12-13.txt
    5 test5 2006-12-14 2006-12-14.txt
    6 test6 2006-12-15 2006-12-15.txt

    les info de la tablestbEmploye
    empPrenom empNom empNumeroEmploye empMotPasse
    smith paul 666 ***
    lantin Sonia 333 ***

    les info de la tables lienCirculaireEmploye
    cirNumero empNumeroEmploye dateLecture
    3 666 2007-01-03
    5 666 2007-01-04

    je désire savoir :
    les employés qui ont lu les circulaire existant
    les employés qui ont pas lu les circulaire existant

    je veux donc afficher empPrenom, empNom, empNumeroEmploye, cirNumero, cirDescription

    je pensais connaitre ceux qui ont lu les circulaires avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT tbCirculaire.cirNumero, cirDescription, cirNomFichier, dateLecture, tbEmploye.empNom
    FROM tbCirculaire, lienCirculaireEmploye, tbEmploye
    WHERE tbCirculaire.cirNumero   in 
                           (select cirNumero from lienCirculaireEmploye)
    cirNumero cirDescription cirNomFichier empPrenom
    3 test3 2006-12-12.txt Paul
    3 test3 2006-12-12.txt Paul
    3 test3 2006-12-12.txt Sonia
    3 test3 2006-12-12.txt Sonia
    5 test5 2006-12-14.txt Paul
    5 test5 2006-12-14.txt Paul
    5 test5 2006-12-14.txt Sonia
    5 test5 2006-12-14.txt Sonia


    je désirerais plutôt obtenir pour les circulaire lue

    3 test3 2006-12-12.txt Paul
    5 test3 2006-12-14.txt Paul

    et pour ceux non lue

    1 test1 2006-12-10.txt Paul
    2 test2 2006-12-11.txt Paul
    4 test4 2006-12-13.txt Paul
    6 test6 2006-12-16.txt Paul

    1 test1 2006-12-10.txt Sonia
    2 test2 2006-12-11.txt Sonia
    3 test3 2006-12-12.txt Sonia
    4 test4 2006-12-13.txt Sonia
    5 test5 2006-12-14.txt Sonia
    6 test6 2006-12-16.txt Sonia

    est-ce possible avec msaccess?

    mercie

  2. #2
    Membre du Club
    Inscrit en
    Mai 2003
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 63
    Points : 67
    Points
    67
    Par défaut
    Bonjour,
    Je n'ai pas pris le temps de tester mais, a priori, tu travailles à l'envers : il faudrait plutôt chercher les employés dont le numéro identifiant se trouve dans la table des consultations de formulaire.
    Après pour lister les consultations, tu peux travailler avec un "INNER JOIN".

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    Citation Envoyé par Toftof
    Bonjour,
    Je n'ai pas pris le temps de tester mais, a priori, tu travailles à l'envers : il faudrait plutôt chercher les employés dont le numéro identifiant se trouve dans la table des consultations de formulaire.
    Après pour lister les consultations, tu peux travailler avec un "INNER JOIN".
    je comprends pas vraiment ce que tu veux dire

  4. #4
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    je crois que pour trouver les circulaire lue, ça pourrait être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT lienCirculaireEmploye.cirNumero, tbEmploye.empPrenom, tbEmploye.empNom, tbEmploye.empNumeroEmploye, tbCirculaire.cirDescription, tbCirculaire.cirDate
    FROM (tbCirculaire INNER JOIN lienCirculaireEmploye ON tbCirculaire.cirNumero = lienCirculaireEmploye.cirNumero) INNER JOIN tbEmploye ON lienCirculaireEmploye.empNumeroEmploye = tbEmploye.empNumeroEmploye;
    il reste maintenant ceux non lue

  5. #5
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Pour les circulaire lues, c'est assez facile, par contre, pour les non lue, j'ai essayé mais je pense que ce ne sera pas possible.

    Comment trouver des enregistrement qui n'existent pas ?
    C'est là que réside toute la difficulté.
    Trouver des données présentes et les trier.
    Ce qui devrait être possible, c'est une comparaison entre le compte de toutes les circulaire et les compte des circulaires lues par individus.
    Autre possibilité, faire une table temporaire qui génèrerait un enregistrement par circulaire pour chaque individu et faire une comparaison avec les lues. Mais ce sera très lourd à gérer.

  6. #6
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    Citation Envoyé par Heureux-oli
    Ce qui devrait être possible, c'est une comparaison entre le compte de toutes les circulaire et les compte des circulaires lues par individus.
    je sais pas si c'est possible de le faire dans une requête ça

  7. #7
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Je pense qu'il faut trouver une méthode pour le faire ne dur.
    En fait, au boulot, j'avais essayé de faire quelque bricoles avec les champs et les tables que tu décris, mais pour les lues, c'était très facile, par contre, j'ai pataugé pour les non lues. Et la seule façon que je voie pour y arriver c'est de générer tous les enregistrements et les comparer aux lues.
    Ce qui revient à générer une table qu'il suffirait de remplir en fonction des lectures.

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    Sauf erreur, y'a éventuellement ça comme requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT tbEmploye.empNumeroEmploye, tbCirculaire.cirNumero
    FROM tbCirculaire, tbEmploye
    WHERE (((tbEmploye.empNumeroEmploye) In (select empnumeroemploye from lienCirculaireEmploye)) AND ((tbCirculaire.cirNumero) Not In (select cirnumero from lienCirculaireEmploye))) OR (((tbEmploye.empNumeroEmploye) Not In (select empnumeroemploye from lienCirculaireEmploye)) AND ((tbCirculaire.cirNumero) In (select cirnumero from lienCirculaireEmploye))) OR (((tbEmploye.empNumeroEmploye) Not In (select empnumeroemploye from lienCirculaireEmploye)) AND ((tbCirculaire.cirNumero) Not In (select cirnumero from lienCirculaireEmploye)))
    ORDER BY tbEmploye.empNumeroEmploye, tbCirculaire.cirNumero;
    cordialement,

    Philippe

  9. #9
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    re bonjour,

    pour les non lues y'a même plus court et peut être plus performant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT tbE.empNom, tbE.empPrenom, tbE.empNumeroEmploye, tbC.cirNumero
    FROM tbCirculaire AS tbC, tbEmploye AS tbE
    WHERE (((Exists (SELECT NULL FROM liencirculaireemploye AS tbLC WHERE tbLC.cirnumero=tbc.cirnumero AND tbLC.empnumeroemploye=tbe.empnumeroemploye))=False))
    ORDER BY tbE.empNom, tbE.empPrenom;
    C'était dans la faq !

    Cordialement,

    Philippe

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

Discussions similaires

  1. Requete multi tables avec champs vides
    Par zezette31 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 02/04/2008, 17h57
  2. Requete multi tables
    Par elmayor1983 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/04/2007, 15h39
  3. Requete multi table avec LIMIT et ORDER BY
    Par yobogs dans le forum Requêtes
    Réponses: 1
    Dernier message: 31/10/2006, 17h29
  4. probleme de requete multi table pour exclure des resultats
    Par voilabad dans le forum Requêtes
    Réponses: 7
    Dernier message: 05/05/2006, 08h49
  5. requete multi table - multi champ
    Par Jean-Matt dans le forum Oracle
    Réponses: 6
    Dernier message: 14/10/2005, 17h18

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