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 :

Souci de jointure ?


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 66
    Points : 41
    Points
    41
    Par défaut Souci de jointure ?
    Bonjour,

    j'ai 5 tables :
    produit(id_produit, id_modele)
    modele(id_modele)
    modele_criteres(id_modele, id_critere)
    critere(id_critere)
    produit_criteres(id_produit, id_critere, valeur)

    Chaque produit est associé à un modèle.
    Un modèle comporte plusieurs critères définis dans la table modele_criteres.
    Un produit a plusieurs critères définis dans la table produit_criteres.

    Je veux une requête qui me sorte pour un produit donné les critères qui ne sont pas valorisés dans la table "produit_criteres" alors qu'ils devraient l'être comme défini dans le modèle qui est associé au produit.

    Exemple :
    Produit1 associé au modèle1
    Modèle1 a 2 critères, poids et volume.
    Si pour le produit1 il n'y a pas de ligne dans produit_criteres pour le volume par exemple, je veux que me requête me sorte cet id de critère qui n'est pas renseigné.

    Ai je été assez clair ?

    En tout cas je suis incapable d'avancer sur cette requête de l'au delà pour moi lol

    Merci de votre aide !

  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
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Est-ce que ceci vous donne ce que vous voulez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT *
    FROM Produit P
    INNER JOIN Modele_criteres MC
        ON MC.id_modele = P.id_modele
    LEFT JOIN Produit_criteres PC
        ON PC.id_produit= P.id_produit
        AND PC.id_critere = MC.id_critere
    WHERE 
        P.id_produit = xxx
        AND  PC.valeur IS NULL

  3. #3
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Peut-être quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT * 
    FROM criteres 
    WHERE 
    	id_critere IN 
    		(SELECT id_critere 
    		FROM modele_criteres 
    		INNER JOIN modele ON modele_criteres.id_modele = modele.id_modele
    		INNER JOIN produit ON produit.id_produit = modele.id_produit
    		WHERE produit.id_produit = TonIdProduit)
    	AND
    	id_critere NOT IN 
    		(SELECT id_critere 
    		FROM produit_criteres
    		WHERE id_produit=TonIdProduit)
    C'est pas très optimisé !

    En plus propre, si ton SGBD supporte l'instruction EXCEPT, tu peu faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT id_critere 
    FROM modele_criteres 
    INNER JOIN modele ON modele_criteres.id_modele = modele.id_modele
    INNER JOIN produit ON produit.id_produit = modele.id_produit
    WHERE produit.id_produit = TonIdProduit
    EXCEPT
    SELECT id_critere 
    FROM produit_criteres
    WHERE id_produit=TonIdProduit
    Les 2 requêtes reviennent au même
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

Discussions similaires

  1. Soucis de jointure
    Par Joseph31 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 03/03/2010, 14h32
  2. Souci de jointures externes multiples
    Par dJe781 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 09/02/2009, 14h25
  3. soucis de jointure sur plusieurs critères "left join ON . AND ON ."
    Par Moutonstar dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 24/11/2008, 17h22
  4. Petit soucis de jointure
    Par grunk dans le forum Requêtes
    Réponses: 2
    Dernier message: 12/09/2007, 16h00
  5. [Débutant]Soucis requête jointure externes (8-i)
    Par jdotti dans le forum Oracle
    Réponses: 7
    Dernier message: 14/10/2005, 15h39

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