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 MySQL Discussion :

Probleme de requete


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Probleme de requete
    Bonjour,

    Je viens vous expliquer mon petit problème...
    Je dispose de 3 tables (personne, documentComplete et dicTypeDocument) dont voici une brève description par image


    L'idée est que chaque personne doit donner un certain nombre de documents différents lors de son inscription. Ces documents sont enregistrés dans la table documentComplete. Certains documents doivent être remis par chaque personne tandis que d'autres documents ne sont pas obligatoires. Ceci est représenté dans la DB par le booléen admRequis. Le numPersonne qui est l'identifiant des personnes est un entier autoincrementable

    Ce que j'aimerais c'est créer une vue permettant d'afficher pour chaque personne n'ayant pas rendu un document requis son nom et prénom ainsi que le libellé du type de document...

    Pour le moment je suis capable d'afficher les documents manquants à une personne grâce à ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT dictypedocument.libelleType,dictypedocument.numtype, personne.numPersonne 
    	from dictypedocument, personne
    	where admrequis=1
    	and personne.numPersonne=335
    	and dictypedocument.numType not in (select numType
                                            from documentcomplete
    	                                where numPersonne=335 )
    Ce code fonctionne à merveille pour une personne à la fois (ici la 335ème).
    Mais je voudrais pouvoir effectuer la même chose pour toutes les personnes d'un coup... Est ce possible? Dois je utiliser une boucle?

    Merci d'avance pour votre aide

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Je vais te proposer une requête qui devrait fonctionner mais que MySQL ne va pas apprécier car elle recourt à une sous-requête corrélée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT p.numpersonne, p.nom,p.prenom,dtc.libelleType
    FROM PERSONNE p, dicTypeDocument dtc
    WHERE NOT EXISTS
    (SELECT * FROM documentComplete dc
    WHERE dc.numpersonne=p.numPersonne
    AND dc.numType=dtc.numType)
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 280
    Points : 11 736
    Points
    11 736
    Par défaut
    Version sans corrélation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT p.numpersonne, p.nom,p.prenom,dtc.libelleType
    FROM 
      (PERSONNE p CROSS JOIN dicTypeDocument dtc)
      LEFT JOIN documentComplete dc ON dc.numpersonne=p.numPersonne
    AND dc.numType=dtc.numType
    WHERE dc.numDocument IS NULL
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    merci beaucoup pour votre aide j'essayerai lundi au boulot et je vous tiens au courant

    encore merci pour l'aide

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Je viens d'essayer vos requêtes et elles fonctionnent toutes les 2 sans problèmes

    Merci beaucoup pour votre aide

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

Discussions similaires

  1. probleme de requete
    Par doudou1 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/04/2004, 13h42
  2. probleme avec requete sql aime pas les strings
    Par lil_jam63 dans le forum Bases de données
    Réponses: 3
    Dernier message: 24/02/2004, 14h45
  3. PROBLEME DE REQUETE IMBRIQUEE
    Par fleuve007 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 31/12/2003, 15h33
  4. probleme de requete
    Par LineLe dans le forum ASP
    Réponses: 8
    Dernier message: 17/09/2003, 16h47
  5. Probleme de requete
    Par misterbillyboy dans le forum Requêtes
    Réponses: 4
    Dernier message: 15/07/2003, 08h24

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