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 :

Requêtes sur 3 tables


Sujet :

Langage SQL

  1. #1
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 729
    Points : 636
    Points
    636
    Par défaut Requêtes sur 3 tables
    Bonsoir, je suis obligé a me remettre a vous car je suis en train de me battre avec une requête SQL qui me semble pourtant toute bête ... mais pour l'instant c'est elle qui gangne :-(

    Soit 3 tables : Objet / Categorie / Sous-Categorie

    Les tables Categorie et Sous-Categorie sont liées a la table Objet

    Je voudrais sortir toutes les catégories possibles avec les objets liés

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT  objets.Nom, table_cat_objet.Nom
    FROM  table_cat_objet  
    LEFT JOIN   objets   ON   objets.Categorie =  table_cat_objet.ID
    cela fonctionne, j'ai bien toutes mes Catégories listées et , si un objet existe dans une catégorie, il est listé (cela me fait des doublons dans les catégories si deux objets ont la même catégorie, mais ce n'est pas grave)

    Par contre je voudrais ajoutersimplement la sous-catégorie dans la sortie, seulement indiquer a la fin de la ligne d'un objet quelle est sa Sous-catégorie ... a partir de la c'est le foin !! il me sort des résultats cartésiens , des 75 lignes (pour 2 objets !!) et je ne m'en sort pas !!

    Si quelqu'un a une idée our une piste !! je suis preneur!!

    Amicalement

    Olivier

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Il y a peut-être un problème de modélisation ici :
    Les tables Categorie et Sous-Categorie sont liées a la table Objet
    N'y a t-il pas de lien entre les catégories et les sous-catégories ?

    Si je traduis ce que vous dites en MCD, ça peut donner :
    Objet -1,1----Appartient----0,n- Catégorie
    Objet -0,1----Appartient----0,n- Sous-catégorie

    Si vous souhaitez afficher :
    - Toutes les catégories
    - Les objets qui sont liés aux catégories
    - Les sous-catégories des objets si elles existent
    Il faut faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT c.nom AS 'Catégorie', o.nom AS 'Objet', s.nom AS 'Sous-catégorie'
    FROM table_cat_objet c
    LEFT OUTER JOIN objets o ON c.ID = o.Categorie
      INNER JOIN sous_categories s ON o.sousCategorie = s.ID
    ORDER BY c.nom, o.nom, s.nom

  3. #3
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 729
    Points : 636
    Points
    636
    Par défaut
    Merci pour ta réponse, j'ai essayé ta solution ( elle a d'ailleurs du faire partie des innombrables tests que j'ai fait )

    J'ai bien la liste de mes objets avec la catégorie et sous-catégorie, mais il ne me liste que les objets qui sont dans la base.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Catégorie  |   Objet     |     Sous-catégorie
    ------------------------------------------
    Minérale       caca-colo         Colas
    Minérale       Pepsi Caca        Colas
    Minérale       Water Closed     Eau
    Thé            Thé au Harem     Archimède
    ------------------------------------------
    Je voudrais sortie un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Catégorie  |   Objet     |     Sous-catégorie
    ------------------------------------------
    Alcool         
    Minérale       caca-colo         Colas
    Minérale       Pepsi Caca        Colas
    Minérale       Water Closed     Eau
    Café
    Thé            Thé au Harem     Archimède
    Bouillon
    ------------------------------------------
    Si j'ai bien pigé je dois commencer mes jpointures par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FROM  table_cat_objet  
    LEFT JOIN   objets   ON   objets.Categorie =  table_cat_objet.ID
    Si je veux en premiers sortir toutes mes catégories
    Mais bon jusque la ... 2 à 0 pour SQL ..

    Merci encore

    Amicalement

    Olivier

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Tu peux nous donner la structure exacte de tes tables ?

  5. #5
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 729
    Points : 636
    Points
    636
    Par défaut
    A vrai dire sur la structure :

    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
    Table Objet 
    ------------
    ID
    Nom 
    Categorie
    Sous_categorie
    Taille
    etc..
     
    Table Categorie
    ---------------
    ID 
    Nom 
     
     
    Sous_Categorie
    ---------------
    ID
    Categorie
    Nom

    Je me suis mis des rubriques de façon a pouvoir tester les différentes possibilités de jointure.

    Les rubriques 'Catégorie', "Sous_catégorie" d'objets sont de meme type entier que celle de Categorie et Sous_categorie des des deux autres tables.

    ... et la rubrique "Categorie" de la table "Sous_categorie" reprend l'ID de la Categorie. (je ne sais pas si je suis clair )

    Bonne journée

    Olivier

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    La structure répond au schéma suivant :
    Sous-catégorie -1,1----Appartenir----0,n- Catégorie
    Objet -1,1----Catégoriser----0,n- Catégorie
    Objet -0,1----Sous-catégoriser----0,n- Sous-catégorie

    Si votre besoin est bien celui que j'ai donné (j'ai mis la dernière ligne au singulier vu la structure des tables) :
    vous souhaitez afficher :
    - Toutes les catégories
    - Les objets qui sont liés aux catégories
    - La sous-catégorie de l'objet si elle existe
    La requête suivante devrait donner le bon résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT c.Nom AS 'Catégorie', o.Nom AS 'Objet', s.Nom AS 'Sous-catégorie'
    FROM Categorie c
    LEFT OUTER JOIN Objet o ON c.ID = o.Categorie
      INNER JOIN Sous_Categorie s ON o.Sous_categorie = s.ID
    ORDER BY c.Nom, o.Nom
    C'est quasiment la même que celle que j'avais faite.

    Mais où est la table 'table_cat_objet' que vous mentionniez dans votre requête ? N'est-ce pas ça qui vous induit en erreur ? A quelle règle de gestion est-elle sensée répondre ?

  7. #7
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 729
    Points : 636
    Points
    636
    Par défaut
    La table table_cat_objet est celle que j'avais nommé catégorie dans mon exemple de structure. J'ai voulu simplifier ...

    J'ai testé ton code en le retranscrivant dans les bons noms de tables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT c.Nom AS 'Catégorie', o.Nom AS 'Objet', s.Nom AS 'Sous-catégorie'
    FROM  table_cat_objet  c
    LEFT OUTER JOIN  objets  o ON c.ID = o.Categorie 
    INNER JOIN  table_sous_cat_objets  s ON o.Sous_categorie = s.ID
    ORDER BY c.Nom, o.Nom
    Tout fonctionne bien , sauf que je n'ai que les catégories dont un objet existe ... bizarre ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Categorie     |    Objet      |      Sous-catégorie |
    ------------------------------------------------
    Categorie 1         Objet 1           Sous-cat 1
    Categorie 2         Objet 2           Sous-cat 2
    Categorie 2         Objet 3           Sous-cat 3
    Alors qu'il existe un catégorie 3 qui n'a pas d'objet ...



    Amicalement

    Olivier

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    C'est peut-être parce que tu as des objets qui n'ont pas de sous catégorie.
    Remplace INNER JOIN par LEFT OUTER JOIN dans la seconde jointure pour voir.

  9. #9
    Membre confirmé Avatar de wd_newbie
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2007
    Messages
    729
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 729
    Points : 636
    Points
    636
    Par défaut
    Pour une fois c'est la dernière idée qui a été la meilleure !!


    Remplace INNER JOIN par LEFT OUTER JOIN dans la seconde jointure pour voir.

    Merci beacoup !!

    Amicalement

    Olivier

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

Discussions similaires

  1. Besoin d'aide pour requête sur grosse table
    Par Fabouney dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/01/2006, 09h01
  2. Problème de requêtes sur deux tables
    Par Pymm dans le forum Access
    Réponses: 6
    Dernier message: 06/09/2005, 09h06
  3. Requête sur plusieurs tables
    Par drinkmilk dans le forum Langage SQL
    Réponses: 8
    Dernier message: 11/07/2005, 12h25
  4. Requête sur 2 tables ?
    Par kibodio dans le forum Langage SQL
    Réponses: 3
    Dernier message: 30/03/2005, 15h57
  5. Requête sur 2 tables et surtout novice...
    Par kibodio dans le forum Langage SQL
    Réponses: 13
    Dernier message: 03/03/2005, 15h45

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