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

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    septembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : septembre 2011
    Messages : 18
    Points : 19
    Points
    19

    Par défaut Requête SQL avec table association éventuelle

    Bonjour à tous,

    Première fois que je demande de l'aide, je vous en remercie par avance.
    Je sèche. Malgré de nombreuses recherches et tentatives, je ne parviens pas à réaliser la requête souhaitée.

    Voici mon schéma de tables :
    Nom : Sans titre.png
Affichages : 28
Taille : 88,1 Ko

    Précision : Lors de l'insertion d'une nouvelle catégorie, un message optionnel peut être joint.

    Je souhaite obtenir toutes les catégories clients, qu'elles est ou non un message, mais si elles ont un message, il doit être d'un type_message précis.
    Et cela en une seule requête.

    Encore merci pour votre aide.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    7 955
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 7 955
    Points : 25 645
    Points
    25 645

    Par défaut

    Précisons bien : tu veux les catégories de client qui soit n'ont aucun message, soit ont un message d'un type particulier.
    C'est bien ça ?
    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.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    septembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : septembre 2011
    Messages : 18
    Points : 19
    Points
    19

    Par défaut

    Oui c'est ça, et en une seule requête.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    7 955
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 7 955
    Points : 25 645
    Points
    25 645

    Par défaut

    Qu'as-tu déjà essayé ?
    Où renontres-tu un problème ?
    Tu peux éventuellement répondre à ta question en faisont une UNION entre deux requêtes qui répondent chacune à l'une des conditions
    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.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    septembre 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : septembre 2011
    Messages : 18
    Points : 19
    Points
    19

    Par défaut

    J'ai essayé différents types de requêtes avec différentes jointures, des NULL, EXISTS et même UNION, sans résultat.
    J'avoue m'y perdre dans le sens des conditions.

    Voici une esquisse de requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT cc.designation, m.message FROM categorie_client cc JOIN categorie_client_a_message cchm ON cc.id = cchm.categorie_client_id JOIN message m ON cchm.message_id = m.id WHERE m.detail IS NULL
     
    UNION
     
    SELECT cc.designation, m.message FROM categorie_client cc JOIN categorie_client_a_message cchm ON cc.id = cchm.categorie_client_id JOIN message m ON cchm.message_id = m.id WHERE m.type_message_id = 2;
    Merci pour le temps consacré à mon problème.

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    7 955
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 7 955
    Points : 25 645
    Points
    25 645

    Par défaut

    Il suffit de pas grand chose, juste une jointure externe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    SELECT  cc.designation
        ,   m.message
    FROM    categorie_client            cc 
        LEFT JOIN   
            categorie_client_a_message  cchm
            ON  cc.id = cchm.categorie_client_id
        INNER JOIN
            message                     m 
            ON  cchm.message_id = m.id
    WHERE   m.detail    IS NULL
    UNION ALL
    SELECT  cc.designation
        ,   m.message
    FROM    categorie_client            cc 
        INNER JOIN   
            categorie_client_a_message  cchm
            ON  cc.id = cchm.categorie_client_id
        INNER JOIN
            message                     m 
            ON  cchm.message_id = m.id
    WHERE    m.type_message_id = 2
    ;
    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.

Discussions similaires

  1. Requête HQL avec tables associatives
    Par mecha31 dans le forum Hibernate
    Réponses: 1
    Dernier message: 15/05/2015, 14h32
  2. Requète SQL avec nom de table contenu dans une variable
    Par samoussa dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/05/2009, 14h58
  3. Requête SQL avec jointure sur trois tables
    Par pit2121 dans le forum SQL
    Réponses: 0
    Dernier message: 19/05/2008, 21h24
  4. Requête SQL avec création de table sous condition
    Par misig dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 04/11/2007, 09h58
  5. [SQL] Requête SQL avec 3 tables liées par la même relation
    Par lenstoi dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 29/08/2007, 00h32

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