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 :

Problème requête basique !


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Problème requête basique !
    Bonjour,

    Je me permets de solliciter car j'ai un soucis sur Access.

    Je vous explique mon problème :

    J'ai 3 tables, une comportant le N° de contrat, une autre le NB de sinistre par contrat et une autre avec le nombre d'appels juridiques.

    Lorsque je fais la jointure par rapport au N° de contrat pour afficher par contrat : le nombre de sinistres et le nombre d'appels juridiques en face, cela ne fonctionne pas.

    En effet, la jointure affiche uniquement les résultats où les valeurs sont égaux (externe gauche ou externe droite).

    C'est à dire imaginons que pour un N° de contrat, il y a 4 sinistres mais aucun appels juridiques, la ligne n'apparait pas sur ma requête.

    Que dois-je faire pour que la requête m'affiche toutes les informations de la base en me mettant des 0 si pour un contrat il y a des sinistres mais pas d'appels juridiques ?
    Existe t-il une jointure externe gauche ET droite ?

    Merci beaucoup pour votre aide.

    Cordialement,

    Jérôme

  2. #2
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Bon alors...
    pfiou... par quel bout le prendre...

    Exemple
    T_Contrats
    CTR_ID
    1
    2
    3
    4

    T_Sinistres
    SIN_ID | SIN_FK_CTR_ID
    a | 1
    b | 1
    c | 1
    d | 2
    e | 3

    Si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    T_Contrat C LEFT JOIN T_Sinistres S ON C.CTR_ID = S.SIN_FK_CTR_ID
    Tu obtiens
    CTR_ID | SIN_ID | SIN_FK_CTR_ID
    1 | a | 1
    1 | b | 1
    1 | c | 1
    2 | d | 2
    3 | e | 3
    4 | NULL | NULL

    Ca, c'est le concept de base
    Alors, maitenant, tu peux ajouter, si tu le souhaites, la table des appels juridiques...
    Mais, d'abord, il faudrait joindre la table des appels juridiques à la table des contrats.
    Ce pendant, dans l'exemple cité plus haut, si tu as 2 appels juridiques pour le contrat 1, tu vas te retrouver avec 8 lignes pour le contrat 1, parce que la requête va te sortir 4(sinistres) * 2(appels juridiques) lignes en résultat.
    Je ne suis pas certain que ec soit ec que tu recherches...

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Maxence HUBICHE Voir le message
    Bon alors...
    pfiou... par quel bout le prendre...

    Exemple
    T_Contrats
    CTR_ID
    1
    2
    3
    4

    T_Sinistres
    SIN_ID | SIN_FK_CTR_ID
    a | 1
    b | 1
    c | 1
    d | 2
    e | 3

    Si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    T_Contrat C LEFT JOIN T_Sinistres S ON C.CTR_ID = S.SIN_FK_CTR_ID
    Tu obtiens
    CTR_ID | SIN_ID | SIN_FK_CTR_ID
    1 | a | 1
    1 | b | 1
    1 | c | 1
    2 | d | 2
    3 | e | 3
    4 | NULL | NULL

    Ca, c'est le concept de base
    Alors, maitenant, tu peux ajouter, si tu le souhaites, la table des appels juridiques...
    Mais, d'abord, il faudrait joindre la table des appels juridiques à la table des contrats.
    Ce pendant, dans l'exemple cité plus haut, si tu as 2 appels juridiques pour le contrat 1, tu vas te retrouver avec 8 lignes pour le contrat 1, parce que la requête va te sortir 4(sinistres) * 2(appels juridiques) lignes en résultat.
    Je ne suis pas certain que ec soit ec que tu recherches...
    Merci pour ton retour.

    Ce que je voudrais c'est de faire apparaitre

    N° Contrat NB sinistres NB RJ
    1 3 2
    2 4 5
    3 10 NULL

    Mais lorsque je fais ma requête, j'obtiens cela :

    N° Contrat NB sinistres NB RJ
    1 3 2
    2 4 5

    La ligne du contrat N°3 disparait, car le NB RJ est NULL.

    Existe t-il une manipulation en "mode création" pour que la requête ne supprime pas ma ligne (N° contrat 3) et qu'il l'a fasse apparaître avec le NB de sinistres (10) et ZERO pour la colonne des RJ ?

    Merci beaucoup pour ton assistance.

  4. #4
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    tu devrais jeter un oeil sur mon tutoriel sur la compréhension des jointures...
    http://mhubiche.developpez.com/Access/tutoJointures/


    • tu fais une requête (R1) qui regroupe tes lignes et les compte, par ID_Contrat, dans la table des sinistres. tu auras ainsi 1 ligne par id_contrat
    • tu fais uner requête (R2) qui regroupe tes lignes et les compte, par ID_Contrat, dans la table des appels juridiques. tu auras ainsi 1 ligne par id_contrat également
    • tu fais une requête qui relie ta table des contrats avec la R1, et qui relie la table des contrats avec la R2, en faisant des jointures gauches dans les 2 cas (de contrat vers Rx)
    • Tu sors les champs id_contrat de la table contrats, Count de sinistres et count d'appels

    et voilà le résultat.

Discussions similaires

  1. [MySQL-5.0] Problème requête (plutôt basique)
    Par slig_80 dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/04/2013, 14h27
  2. erreur3073 Problème requête
    Par amel123456789 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 01/04/2004, 10h15
  3. Problème requête qui renvoie plusieurs
    Par dai.kaioh dans le forum Langage SQL
    Réponses: 6
    Dernier message: 01/04/2004, 10h07
  4. Problème requête avec UNION et ORDER BY
    Par Yann21 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 12/12/2003, 11h02
  5. Réponses: 8
    Dernier message: 23/10/2003, 16h22

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