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 :

[DEBUTANT] Trop de lignes renvoyées, qu'est ce qui coince ?


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 24
    Par défaut [DEBUTANT] Trop de lignes renvoyées, qu'est ce qui coince ?
    Bonjour,

    J'ai élaboré une petite base de données mais rencontre un problème au moment de la requête, qui au lieu de me renvoyer deux résultats comme escompté, m'en renvoie trois dont un faux.

    Voici le MCD et un jeu de données (désolé pour le coin de table):


    Voici ma requête pour renvoyer tout, y compris les objets n'apparaissant pas dans un catalogue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT
    Objet.libelle,
    Catalogue.libelle,
    Page.numero
    FROM Objet
    LEFT JOIN Objet_catalogue ON Objet.id=Objet_catalogue.objet_id
    LEFT JOIN Catalogue ON Objet_catalogue.catalogue_id=Catalogue.id
    LEFT JOIN Page ON Page.catalogue_id=Catalogue.id
    Voici le résultat:
    Statue A - catalogue Drouot - page 230
    Statue A - catalogue musée - page XV
    Statue A - catalogue Drouot - page 124 (???)

    La dernière ligne ne devrait pas exister. Que fais-je mal ?

    Avec tous mes remerciements pour votre aide !
    Images attachées Images attachées  

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Pourquoi dites-vous que la dernière ligne ne devrait pas exister ? pourquoi ne serait-ce pas la première ?

  3. #3
    Membre émérite
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 452
    Par défaut
    Bonjour,

    Il n'y a aucune liaison entre la page du catalogue et l'objet. Donc comme tu as deux pages dans ton catalogue elles sont toutes retournées puisque le SGBD ne peut pas filtrer une page par rapport à l'objet.

    Je ne connais pas le besoin mais si tu veux une liaison entre la page de catalogue il te faut :

    faire une liaison entre la page et l'objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
             objet <-> page (liaison apparait dans) (les attributs de la liaison étant objet_id et page_id (au lieu de catalogue_id)
             et
             catalogue <-> page (liaison contenir)
    la page étant l'objet central de ton modèle.
    le lien entre l'objet et le catalogue se déduira de la liaison entre l'objet et la page (parce que une page n'appartient qu'a un seul catalogue)

    Cordialement

  4. #4
    Membre Expert
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    956
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 956
    Par défaut
    Bonjour,

    Citation Envoyé par pluche52 Voir le message
    Voici ma requête pour renvoyer tout, y compris les objets n'apparaissant pas dans un catalogue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT
    Objet.libelle,
    Catalogue.libelle,
    Page.numero
    FROM Objet
    LEFT JOIN Objet_catalogue ON Objet.id=Objet_catalogue.objet_id
    LEFT JOIN Catalogue ON Objet_catalogue.catalogue_id=Catalogue.id
    LEFT JOIN Page ON Page.catalogue_id=Catalogue.id
    En lisant la requête je n'arrive pas au même objectif que celui annoncé.
    Objet -> Objet_Catalogue -> Catalogue -> Page
    => lister tous les objets ayant ou non des correspondances avec les tables listées et ce à un niveau quelconque.
    alors que la demande est : renvoyer tout, y compris les objets n'apparaissant pas dans un catalogue
    Objet -> (Objet_Catalogue -Catalogue - Page)
    Note : les outer join sont plus couteux que les join et imposent le chemin de résolution.

    Ça c'est pour la remarque de fond.

    Pour répondre à la question :
    En s'appuyant sur l'exemple de donnée figurant sur le papier, la table Page a été alimentée comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    insert into Page(id,numero,catalogue_id) values
     (1,'230';1)
    ,(2,'YV',2)
    ,(3,'124',1);
    donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from Page where catalogue_id in(1,2) ;
    renvoie bien 3 lignes

    il est donc normal que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JOIN Page ON Page.catalogue_id=Catalogue.id
    renvoie les 3 valeurs

Discussions similaires

  1. [debutant] ajout de ligne a un tableau
    Par rivierem dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 29/09/2005, 10h44
  2. [DTS sql server] Erreur lors de l'insertion de trop de ligne
    Par MoTUmBo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/07/2005, 22h44
  3. [debutant] supprimmer une ligne d'un fichier
    Par F.F. dans le forum Débuter
    Réponses: 2
    Dernier message: 25/05/2005, 08h45
  4. [DEBUTANT]comparaison une ligne avec un STRing
    Par Battosaiii dans le forum Langage
    Réponses: 2
    Dernier message: 05/05/2005, 20h15

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