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 :

Problème sur la réalisation d'une vue


Sujet :

Langage SQL

  1. #1
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut Problème sur la réalisation d'une vue
    Bonjour tout le monde,

    voila, j'ai une base de données sous FrontBase avec 6 tables.
    Article(id, libelle, prix, Id_TypeArticle)
    TypeArticle(id, libelle)
    Attribut(id, nom, javaClasse, id_TypeArticle)
    ValeurAttribut(id, id_Article, id_TypeArticle, id_Attribut)
    ValeurAttributEntier(id, id_Article, id_TypeArticle, valeur)
    ValeurAttributTexte(id, id_Article, id_TypeArticle, valeur)

    => Ce qui est en gras sont les clés étrangère et ce qui est souligné sont les clés primaire.

    En sachant qu'a la base, ValeurAttributTexte et ValeurAttributEntier hérite de ValeurAttribut.

    Je souhaite que ma vue affiche tout les renseignements concernant le premier type d'article. Voici ce que j'ai fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT "a"."libelle" AS "article", "a"."prix" AS "prixArticle", "ta"."libelle" AS "TypeArticle", "att"."nom" AS "NomAttribut", "ValAttEntier"."valeur" AS "ValeurEntier", "ValAttTexte"."valeur" AS "ValeurTexte" FROM "article" AS "a","TypeArticle" AS "ta","Attribut" AS "att","ValeurAttributEntier" AS "ValAttEntier","ValeurAttributTexte" AS "ValAttTexte","ValeurAttribut" AS "va" WHERE ("a"."id_TypeArticle"="ta"."id") AND ("att"."id_TypeArticle"="ta"."id") AND ("va"."id_Attribut"="att"."id") AND ("va"."id_Article"="a"."id") AND ("va"."id_TypeArticle"="ta"."id") AND ("ValAttEntier"."id"="va"."id") AND ("ValAttEntier"."id_Article"="va"."id_Article") AND ("ValAttEntier"."id_TypeArticle"="va"."id_TypeArticle") AND ("ValAttTexte"."id"="va"."id") AND ("ValAttTexte"."id_Article"="va"."id_Article") AND ("ValAttTexte"."id_TypeArticle"="va"."id_TypeArticle") AND ("ta"."id"=1)
    mais rien s'affiche alors que si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT "a"."libelle" AS "article", "a"."prix" AS "prixArticle", "ta"."libelle" AS "TypeArticle", "att"."nom" AS "NomAttribut" FROM "article" AS "a","TypeArticle" AS "ta","Attribut" AS "att","ValeurAttribut" AS "va" WHERE ("a"."id_TypeArticle"="ta"."id") AND ("att"."id_TypeArticle"="ta"."id") AND ("va"."id_Attribut"="att"."id") AND ("va"."id_Article"="a"."id") AND ("va"."id_TypeArticle"="ta"."id") AND ("ta"."id"=1)
    cela m'affiche bien ce qui est dans le select.
    Donc mon problème est au niveau des tables ValeurAttribut, ValeurAttributTexte, ValeurAttributEntier.
    Mais je vois pas comment faire??

    Merci d'avance

  2. #2
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut du nouveau
    Je pense avoir trouvé d'ou provient le problème mais je sait pas comment le résoudre, si quelqu'un a une idée??

    J'ai fais plusieurs tests, les voicis :
    1) Vue affichant que les valeursAttributsEntier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT "va"."id" AS "id", "va"."id_Attribut" AS "Attribut", "va"."id_Article" AS "Article", "va"."id_TypeArticle" AS "TypeArticle", "ValEnt"."valeur" AS "valeurEntier" FROM "ValeurAttribut" AS "va","ValeurAttributEntier" AS "ValEnt" WHERE ("va"."id"="ValEnt"."id") AND ("va"."id_Article"="ValEnt"."id_Article") AND ("va"."id_TypeArticle"="ValEnt"."id_TypeArticle") AND ("va"."id_TypeArticle"=1)
    2) Vue affichant que les valeursAttributTexte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT "va"."id" AS "id", "va"."id_Attribut" AS "Attribut", "va"."id_Article" AS "Article", "va"."id_TypeArticle" AS "TypeArticle", "ValTexte"."valeur" AS "valeurTexte" FROM "ValeurAttribut" AS "va","ValeurAttributTexte" AS "ValTexte" WHERE ("va"."id"="ValTexte"."id") AND ("va"."id_Article"="ValTexte"."id_Article") AND ("va"."id_TypeArticle"="ValTexte"."id_TypeArticle") AND ("va"."id_TypeArticle"=1)
    => je me suis rendu compte que la cela fonctionné parfaitement mais dés que je souhaite afficher les 2 types de valeurs dans la même vues, plus rien ne s'affiche. Donc je supose que mon problème provient d'un problème de jointure vu que les 2 tables appelles les même champs de la table "ValeurAttribut".

    Quelqu'un a t-il une idée??

    Cordialement!!

  3. #3
    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 quoi tous ces guillemets dans les requêtes ? Ca marche ça ?

    Nettoyons tout ça, utilisons les jointures normalisées et passons à la ligne, ce sera plus lisible.
    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
    SELECT a.libelle AS article, a.prix AS prixArticle,
    	ta.libelle AS TypeArticle, att.nom AS NomAttribut,
    	ValAttEntier.valeur AS ValeurEntier, ValAttTexte.valeur AS ValeurTexte 
    FROM article AS a
    INNER JOIN TypeArticle AS ta ON a.id_TypeArticle = ta.id
    	INNER JOIN Attribut AS att ON att.id_TypeArticle = ta.id
    		INNER JOIN ValeurAttribut AS va ON va.id_Attribut = att.id
    			INNER JOIN ValeurAttributEntier AS ValAttEntier ON ValAttEntier.id = va.id 
    				AND ValAttEntier.id_Article = va.id_Article
    				AND ValAttEntier.id_TypeArticle = va.id_TypeArticle
    			INNER JOIN ValeurAttributTexte AS ValAttTexte ON ValAttTexte.id = va.id
    				AND ValAttTexte.id_Article = va.id_Article
    				AND ValAttTexte.id_TypeArticle = va.id_TypeArticle
    	INNER JOIN ValeurAttribut AS va2 ON va2.id_TypeArticle = ta.id
    INNER JOIN ValeurAttribut AS va3 ON va3.id_Article = a.id
    WHERE ta.id = 1
    J'ai ajouté deux instances de la table ValeurAttribut.
    En effet, dans votre requête, vous aviez vos 6 tables dans le FROM mais 7 conditions de jointures entre deux tables différentes (deux jointures sont à conditions multiples comme vous pouvez le voir dans la requête).

    On voit bien avec la syntaxe normalisée qu'on ne peut pas faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    FROM A
    JOIN B ON A.x = B.x
      JOIN C ON B.x = C.x AND A.x = C.x
    La seconde jointure est entre B et C, pas entre A et C ! Il faut donc une deuxième instance de C pour pouvoir réaliser la jointure.

    Passons à votre modèle de données :
    Article(id, libelle, prix, Id_TypeArticle)
    TypeArticle(id, libelle)
    Attribut(id, nom, javaClasse, id_TypeArticle)
    ValeurAttribut(id, id_Article, id_TypeArticle, id_Attribut)
    ValeurAttributEntier(id, id_Article, id_TypeArticle, valeur)
    ValeurAttributTexte(id, id_Article, id_TypeArticle, valeur)
    J'en déduis les morceaux de MCD suivants :
    1) Article -1,1----Typer----0,n- TypeArticle
    "Un article est d'un certain type"
    Structure OK.

    2) Attribut -1,1----Dépendre----0,n- Type article
    "Un attribut dépend d'un type d'article"
    Structure OK

    3) ValeurAttribut -1,1----Rattacher----0,n- Attribut
    Article -----------0,n--------|
    "Une valeur d'attribut se rattache à un attribut et à un article"
    Pourquoi reprendre id_TypeArticle alors que l'id_Attribut ou l'idArticle suffit à retrouver le type d'article ?

    4) ValeurAttributEntier -1,1----Etre----0,1- ValeurAttribut
    ValeurAttributTexte -1,1----Etre----0,1- ValeurAttribut
    Ici, l'id de ValeurAttribut suffirait. Inutile de reprendre les colonnes de ValeurAttribut, il y a redondance d'information.

    Vous devriez normalement avoir les tables :
    ValeurAttribut(id, id_Article, id_Attribut)
    ValeurAttributEntier(id_ValeurAttribut, Valeur)
    ValeurAttributTexte(id_ValeurAttribut, Valeur)

    Ce modèle plus simple simplifierait d'autant votre requête.

  4. #4
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à CinePhil
    C'est quoi tous ces guillemets dans les requêtes ? Ca marche ça ?
    Les guillemets c'est le logiciel qui les a mis(FrontBase).

    Pour la requête de la vue, je connais juste "SELECT......FROM....WHERE......."et non avec InnerJoin, donc ya t'il moyen de la réaliser avec "SELECT....FROM....WHERE......"??(car je suis en BTS et à la fin de l'année je présenterai surement le projet donc je voudrais pouvoir l'expliquer si je doit le faire.

    Pourquoi reprendre id_TypeArticle alors que l'id_Attribut ou l'idArticle suffit à retrouver le type d'article ?
    Ben j'ai repris id_TypeArticle tout simplement parce que :
    Article -- 0,n ---------(1,1)--ValeurAttribut
    et
    Article -- (1,1)----------(0,n--TypeArticle
    donc id de la table TypeArticle devient clé étrangère et clé primaire de la classe Article alors donc ValeurAttribut prend la clé primaire d'article.c'est bien ça??

    Donc cela me donne bien ce que j'avais fais,non??

    Cordialement

  5. #5
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    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
    SELECT a.libelle AS article, a.prix AS prixArticle,
    	ta.libelle AS TypeArticle, att.nom AS NomAttribut,
    	ValAttEntier.valeur AS ValeurEntier, ValAttTexte.valeur AS ValeurTexte 
    FROM article AS a
    INNER JOIN TypeArticle AS ta ON a.id_TypeArticle = ta.id
    	INNER JOIN Attribut AS att ON att.id_TypeArticle = ta.id
    		INNER JOIN ValeurAttribut AS va ON va.id_Attribut = att.id
    			INNER JOIN ValeurAttributEntier AS ValAttEntier ON ValAttEntier.id = va.id 
    				AND ValAttEntier.id_Article = va.id_Article
    				AND ValAttEntier.id_TypeArticle = va.id_TypeArticle
    			INNER JOIN ValeurAttributTexte AS ValAttTexte ON ValAttTexte.id = va.id
    				AND ValAttTexte.id_Article = va.id_Article
    				AND ValAttTexte.id_TypeArticle = va.id_TypeArticle
    	INNER JOIN ValeurAttribut AS va2 ON va2.id_TypeArticle = ta.id
    INNER JOIN ValeurAttribut AS va3 ON va3.id_Article = a.id
    WHERE ta.id = 1
    J'ai essayé ta requête mais lorsque je l'exécute(que je regarde les lignes) ben rien ne s'affiche alors que je devrait avoir des choses. Ce qui est bizarre aussi c'est que je n'est pas de message d'erreur.
    Comment puis-je faire??


    Sinon j'ai essayé la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    select a.libelle as Article, a.prix as prixArticle, att.nom as Attribut, ValEnt.valeur as ValeurEntier, ValTexte.valeur as ValeurTexte
    from ValeurAttributEntier as ValEnt, ValeurAttributTexte as ValTexte, TypeArticle as ta, Article as a, Attribut as att
    where a.id_TypeArticle = ta.id
    and ta.id = att.id_TypeArticle
    and ValEnt.id  = (select va1.id
                             from ValeurAttribut as va1
                             and va1.id_TypeArticle = 1)
    and ValTexte.id = (select va2.id
                             from ValeurAttribut as va2
                             and va2.id_TypeArticle = 1)
    and ta.id = 1
    mais voici le message d'erreur que j'ai lorsque je souhaite la créer :
    Encountered an error while creating view.

    Semantic error 209. Expression is not of type BOOLEAN.
    Semantic error 485. Near: CREATE VIEW "_SYSTEM"."Vue_4" AS SELECT "a"."libelle" AS "Article", "a"."prix" AS "prixArticle", "att"."nom" AS "Attribut", "ValEnt"."valeur" AS "ValeurEntier", "ValTexte"."valeur" AS "ValeurTexte" FROM "ValeurAttributEntier" AS "ValEnt","ValeurAttributTexte" AS "ValTexte","TypeArticle" AS "ta","Article" AS "a","Attribut" AS "att" WHERE ("a"."id_TypeArticle"="ta"."id") AND ("ta"."id"="att"."id_TypeArticle") AND ("ValEnt"."id"=((SELECT "va1"."id" FROM "ValeurAttribut" AS "va1")) AND ("va1"."id_TypeArticle"=1)) AND ("ValTexte"."id"=((SELECT "va2"."id" FROM "ValeurAttribut" AS "va2")) AND ("va2"."id_TypeArticle"=1)) AND ("ta"."id"=1);.
    Semantic error 485. Near: "ValeurAttribut".
    Semantic error 116. Referenced TABLE - va1 - does not exist.
    Semantic error 485. Near: "va1"."id_TypeArticle".
    Semantic error 226. Referenced column - id_TypeArticle - not found.
    Semantic error 217. Datatypes are not comparable or don't match.
    Semantic error 485. Near: 1.
    Semantic error 024. Left-hand side of OR/AND is not of type Boolean.
    Semantic error 025. Right-hand side of OR/AND is not of type Boolean.
    Semantic error 217. Datatypes are not comparable or don't match.
    Semantic error 217. Datatypes are not comparable or don't match.
    Semantic error 209. Expression is not of type BOOLEAN.
    Semantic error 485. Near: "ValeurAttribut".
    Semantic error 116. Referenced TABLE - va2 - does not exist.
    Semantic error 485. Near: "va2"."id_TypeArticle".
    Semantic error 226. Referenced column - id_TypeArticle - not found.
    Semantic error 217. Datatypes are not comparable or don't match.
    Semantic error 485. Near: 1.
    Semantic error 024. Left-hand side of OR/AND is not of type Boolean.
    Semantic error 025. Right-hand side of OR/AND is not of type Boolean.
    Semantic error 217. Datatypes are not comparable or don't match.
    Semantic error 217. Datatypes are not comparable or don't match.
    Exception 363 (40:000). Transaction rollback.
    Comment puis-je faire??

    Cordialement!!

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Citation Envoyé par loic20h28 Voir le message
    Comment puis-je faire??
    Citation Envoyé par loic20h28 Voir le message
    Pour la requête de la vue, je connais juste "SELECT......FROM....WHERE......."et non avec InnerJoin, donc ya t'il moyen de la réaliser avec "SELECT....FROM....WHERE......"??(car je suis en BTS et à la fin de l'année je présenterai surement le projet donc je voudrais pouvoir l'expliquer si je doit le faire.
    Et bien en explorant sur Internet, par exemple sur ce forum, par exemple dans un des sujet "sticky" et en apprenant plus sur SQL (normalement cette phrase fait apparaître un Pro qui vous vendra un livre ).

  7. #7
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à Waldar
    Désolé mais je préfère continuer comme on me la appris pour ne pas me mélanger.

    Puis toute façon le code SQL de CinePhil (avec les InnerJoin) ne fonctionne pas.

    Je me demande donc si c'est vraiment possible car en fait le résultat sera un truc du genre :
    LibelleArticle / NomAttribut / ValeurEntier / ValeurTexte
    Levis 501 / Taille / 36 /
    Levis 501 / Taille / 38 /
    Levis 501 / Tissu / / Jean
    En gros, pour chaque ligne on aura une colonne vide soit ValeurEntier soit ValeurTexte.

    Est-ce que cela est vraiment possible

    Cordialement!!

  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
    Citation Envoyé par loic20h28 Voir le message
    Désolé mais je préfère continuer comme on me la appris pour ne pas me mélanger.
    Mauvaise réponse !
    Refuser d'apprendre à utiliser le langage normatif, c'est continuer d'utiliser un tournevis plat pour visser une vis cruciforme.

    Puis toute façon le code SQL de CinePhil (avec les InnerJoin) ne fonctionne pas.
    Sans effort pour chercher à comprendre pourquoi ça ne fonctionne pas, c'est sûr que ça ne va pas se faire tout seul !
    Pour info, j'ai passé plus d'une demie heure hier soir à décortiquer votre requête pour essayer de trouver ce qui n'allait pas.

    Je me demande donc si c'est vraiment possible car en fait le résultat sera un truc du genre :

    En gros, pour chaque ligne on aura une colonne vide soit ValeurEntier soit ValeurTexte.

    Est-ce que cela est vraiment possible ?
    C'est sûrement possible mais vu la complexité de votre machin et votre modèle de données mal foutu, je n'ai pas forcément la demie heure nécessaire maintenant. Je verrai ce soir chez moi si j'y pense et si j'ai envie.

  9. #9
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 386
    Points
    18 386
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Refuser d'apprendre à utiliser le langage normatif, c'est continuer d'utiliser un tournevis plat pour visser une vis cruciforme.
    J'aime bien cette analogie. Je la réutiliserai probablement

  10. #10
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à CinePhil
    Mauvaise réponse !
    Refuser d'apprendre à utiliser le langage normatif, c'est continuer d'utiliser un tournevis plat pour visser une vis cruciforme.
    je ne refuse pas, mais pour le moment, je préfère pas car en cours on m'a habitué avec "SELECT....FROM....WHERE....." et donc je ne veux pas me mélanger dans les façon de faire car me connaissant ce serait le cas et donc je me planterai. Mais après mes études (donc début juin) j'étudierai cette manière sans problème ce sera même avec plaisir.

    Sans effort pour chercher à comprendre pourquoi ça ne fonctionne pas, c'est sûr que ça ne va pas se faire tout seul !
    Pour info, j'ai passé plus d'une demie heure hier soir à décortiquer votre requête pour essayer de trouver ce qui n'allait pas.
    Je suis désolé, mais je suis sur mon problème depuis hier après midi et j'y arrive vraiment pas, j'ai essayé plusieurs choses mais pas trop d'avancement.

    C'est sûrement possible mais vu la complexité de votre machin et votre modèle de données mal foutu, je n'ai pas forcément la demie heure nécessaire maintenant. Je verrai ce soir chez moi si j'y pense et si j'ai envie.
    Pour mon modèle de donnée, je n'ai pas trop le choix a cause des cardinalités (1,1).

    J'ai réussit à faire la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT a.libelle AS Article, a.prix AS PrixArticle, att.nom, ValEntier.valeur AS valeurAttributEntier, ValTexte.valeur AS ValeurAttributTexte 
    FROM Article AS a,TypeArticle AS ta,Attribut AS att, ValeurAttribut AS va1
    , ValeurAttribut AS va2, ValeurAttributTexte AS ValTexte, ValeurAttributEntier AS ValEntier 
    WHERE (a.id_TypeArticle=ta.id) AND (ta.id=att.id_TypeArticle) AND (va1.id=ValEntier.id) AND (a.id=ValEntier.id_Article) AND (ta.id=ValEntier.id_TypeArticle) AND (va2.id=ValTexte.id) AND (a.id=ValTexte.id_Article) AND (ta.id=ValTexte.id_TypeArticle) AND (ta.id=1)
    ce qui me donne comme résultat :
    Article / Prix / NomAttribut / ValAttEntier / ValAttTexte
    Levis 501 / 45 / tissu / 36 / jean
    Levis 501 / 45/ tissu / 38 / Jean
    sportwear / 12 / tissu / 38 / Velour
    Levis 501 / 45 / tissu / 36 / jean
    Levis 501 / 45/ tissu / 38 / Jean
    sportwear / 12 / tissu / 38 / Velour
    Mais je devrait obtenir ceci :
    Article / Prix / NomAttribut / ValAttEntier / ValAttTexte
    Levis 501 / 45 / taille / 36 /
    Levis 501 / 45/ taille / 38 /
    Levis 501 / 45 / tissu / / Jean
    sportwear / 12 / taille / 38 /
    sportwear / 12 / tissu / / Velour
    Je vois pas ce qu'il faudrait que je change pour y arriver.

    Merci d'avance!!

  11. #11
    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
    Besoin semble t-il similaire à celui pour lequel j'ai donné une réponse cet après-midi ici
    Pour afficher un seul attribut par ligne, soit l'entier, soit le textuel, il faut faire deux requêtes et les unir.

    Inspire toi de ma solution sur l'autre message. désolé mais c'est encore en jointures normalisées. Il va falloir t'y mettre plus vite que tu ne penses, tu y gagnera beaucoup en clarté, en compréhension... bref, en compétences.

    Et si tes profs ne t'ont appris que le FROM a,b WHERE, j'espère qu'ils t'apprendront l'écriture normalisée avant la fin de l'année sinon c'est à désespérer !

    Tu pourrais même demander à ton prof si il va aborder l'écriture normalisée avant la fin de l'année. Et s'il ne sait pas ce que c'est, oriente le vers ce tutoriel.
    La norme avec JOIN date quand même de 1992 ; il serait peut-être temps de s'y mettre, 17 ans après !

  12. #12
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à CinePhil
    Merci pour tes informations, je vais regarder cela.

    Mais moi c'est pas une requête, mais une vue, je me demande si je peux faire des sous requêtes dans une vue?? car il me semble que sur un site (impossible à retrouver!) tout t'a l'heure j'ai vu qu'il n'étais pas possible, je me trompe peut être!!

    Cordialement!

    P.S. :en cours on a vu les requête simple (SELECT.....FROM.....WHERE.......) et non avec INNERJOIN car la plupart on déja assez de difficulté avec la formule simple donc on ne le verra pas.(je le sais car je redouble ma deuxième année.

    Merci d'avance!!

  13. #13
    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
    Et pourtant c'est tellement plus simple à comprendre avec JOIN !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT <== Je sélectionne quelque chose
    FROM <== dans une table
    JOIN <== qui est jointe à une autre
      ON <=== selon cette condition de jointure
    WHERE <== et je restreins le résultat à cette condition
    GROUP BY <== je regroupe les données selon les colonnes qui ne font pas l'objet d'un calcul
    HAVING <== je restreins le résultat des calculs à cette condition
    ORDER BY <== j'ordonne le tout selon cet ordre
    Avec FROM a,b WHERE, on mélange les conditions de jointure et les conditions de restriction, on oublie des choses, on ne s'y retrouve plus !

  14. #14
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut
    Donc j'ai suivi ton conseil CinePhil et voila ce que cela me donnerais :
    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
    SELECT  Article, PrixArticle, Attribut, ValeurEntier, ValeurTexte
    FROM
    (SELECT "a"."libelle", "a"."prix", "att"."nom", COALESCE("ValeurEntier"."valeur", 0) AS "ValeurEntier", Null As ValeurTexte FROM Article as a
    Inner join TypeArticle as ta ON a.id_TypeArticle = ta.id
    Inner join Attribut as att ON att.id_TypeArticle = ta.id
    Inner join ValeurAttribut as va ON va.id_Attribut = att.id
    Inner Join ValeurAttributEntier as ValeurEntier ON ValeurEntier.id = va.id AND ValeurEntier.id_Article = va.id_Article   AND ValeurEntier.id_TypeArticle = va.id_TypeArticle
    Inner join ValeurAttribut as va2 ON va2.id_TypeArticle = ta.id
    Inner Join ValeurAttribut as va3 ON va3.id_Article = a.id
     
    UNION
     
    (SELECT "a"."libelle", "a"."prix", "att"."nom", Null AS "ValeurEntier", COALESCE(ValeurTexte.valeur, 0) As ValeurTexte FROM Article as a
    Inner join TypeArticle as ta ON a.id_TypeArticle = ta.id
    Inner join Attribut as att ON att.id_TypeArticle = ta.id
    Inner join ValeurAttribut as va ON va.id_Attribut = att.id
    Inner Join ValeurAttributTexte as ValeurTexte ON ValeurTexte.id = va.id AND ValeurTexte.id_Article = va.id_Article   AND ValeurTexte.id_TypeArticle = va.id_TypeArticle
    Inner join ValeurAttribut as va2 ON va2.id_TypeArticle = ta.id
    Inner Join ValeurAttribut as va3 ON va3.id_Article = a.id
    ))
    where ta.id = 1
    mais voici l'erreur qu'il me renvoie :
    Encountered an error while creating view.

    Semantic error 218. NULL not allowed here.
    Semantic error 218. NULL not allowed here.
    Syntax error 130. Expected <table reference> not found.
    Syntax error 130. Expected <table reference> not found.
    Exception 363 (40:000). Transaction rollback.
    Si quelqu'un a une idée, je suis preneur!!

    Cordialement

  15. #15
    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
    J'essaie de comprendre les messages d'erreur retournés par ton SGBD exotique...

    Semantic error 218. NULL not allowed here.
    Essaie de remplacer les NULL dans les SELECT par " " (2 guillemets) ou bien '' (2 apostrophes) pour donner une châine vide, au moins pour la valeur Texte et éventuellement un 0 à la place de NULL pour la valeur entière.

    Syntax error 130. Expected <table reference> not found.
    L'erreur est sans doute là :
    ta est un alias de table qui est dans les sous-requêtes mais ta.id n'est pas dans le résultat de l'union.

    Il te faut ajouter l'id dans le premier SELECT et aliasser le résultat de l'union :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT id, Article, ...
    FROM (
    ...
    UNION
    ...
    ) AS tmp
    WHERE tmp.id = 1
    Au passage, tu as entouré la seconde sous-requête de parenthèse mais pas la première. Fais-le aux deux requêtes ou pas du tout.

  16. #16
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à CinePhil
    Bonjour,

    donc j'ai essayé ce que tu ma dit mais j'ai l'impression que c'est encore pire (ou alors je me suis trompé quelque part) :
    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
    SELECT  id, Article, PrixArticle,  Attribut, ValeurEntier, ValeurTexte
    FROM
    (SELECT ta.id, a.libelle, a.prix, att.nom, COALESCE(ValeurEntier.valeur, 0) AS ValeurEntier,  " " As ValeurTexte FROM Article as a
    Inner join TypeArticle as ta ON a.id_TypeArticle = ta.id
    Inner join Attribut as att ON att.id_TypeArticle = ta.id
    Inner join ValeurAttribut as va ON va.id_Attribut = att.id
    Inner Join ValeurAttributEntier as ValeurEntier ON ValeurEntier.id = va.id AND ValeurEntier.id_Article = va.id_Article   AND ValeurEntier.id_TypeArticle = va.id_TypeArticle
    Inner join ValeurAttribut as va2 ON va2.id_TypeArticle = ta.id
    Inner Join ValeurAttribut as va3 ON va3.id_Article = a.id
     
    UNION
     
    SELECT ta.id, a.libelle, a.prix, att.nom, 0 AS ValeurEntier, COALESCE(ValeurTexte.valeur, 0) As ValeurTexte FROM Article as a
    Inner join TypeArticle as ta ON a.id_TypeArticle = ta.id
    Inner join Attribut as att ON att.id_TypeArticle = ta.id
    Inner join ValeurAttribut as va ON va.id_Attribut = att.id
    Inner Join ValeurAttributTexte as ValeurTexte ON ValeurTexte.id = va.id AND ValeurTexte.id_Article = va.id_Article   AND ValeurTexte.id_TypeArticle = va.id_TypeArticle
    Inner join ValeurAttribut as va2 ON va2.id_TypeArticle = ta.id
    Inner Join ValeurAttribut as va3 ON va3.id_Article = a.id
    ) as tmp
    where tmp.id = 1
    voici le message d'erreur généré :
    Encountered an error while creating view.

    Semantic error 226. Referenced column - - not found.
    Semantic error 485. Near: CREATE VIEW "_SYSTEM"."Vue_4" AS SELECT "id", "Article", "PrixArticle", "Attribut", "ValeurEntier", "ValeurTexte" FROM ((SELECT "ta"."id", "a"."libelle", "a"."prix", "att"."nom", COALESCE("ValeurEntier"."valeur",0) AS "ValeurEntier", " " AS "ValeurTexte" FROM "ValeurAttribut" AS "va3","ValeurAttribut" AS "va2","ValeurAttributEntier" AS "ValeurEntier","ValeurAttribut" AS "va","Attribut" AS "att","Article" AS "a","TypeArticle" AS "ta" WHERE ("va3"."id_Article"="a"."id") AND ("va2"."id_TypeArticle"="ta"."id") AND ("ValeurEntier"."id"="va"."id") AND ("ValeurEntier"."id_Article"="va"."id_Article") AND ("ValeurEntier"."id_TypeArticle"="va"."id_TypeArticle") AND ("va"."id_Attribut"="att"."id") AND ("att"."id_TypeArticle"="ta"."id") AND ("a"."id_TypeArticle"="ta"."id"))UNION(SELECT "ta"."id", "a"."libelle", "a"."prix", "att"."nom", 0 AS "ValeurEntier", COALESCE("ValeurTexte"."valeur",0) AS "ValeurTexte" FROM "ValeurAttribut" AS "va3","ValeurAttribut" AS "va2","ValeurAttributTexte" AS "ValeurTexte","ValeurAttribut" AS "va","Attribut" AS "att","Article" AS "a","TypeArticle" AS "ta" WHERE ("va3"."id_Article"="a"."id") AND ("va2"."id_TypeArticle"="ta"."id") AND ("ValeurTexte"."id"="va"."id") AND ("ValeurTexte"."id_Article"="va"."id_Article") AND ("ValeurTexte"."id_TypeArticle"="va"."id_TypeArticle") AND ("va"."id_Attribut"="att"."id") AND ("att"."id_TypeArticle"="ta"."id") AND ("a"."id_TypeArticle"="ta"."id"))) AS "tmp" WHERE "tmp"."id"=1;.
    Semantic error 485. Near: 0.
    Semantic error 217. Datatypes are not comparable or don't match.
    Semantic error 485. Near: CREATE VIEW "_SYSTEM"."Vue_4" AS SELECT "id", "Article", "PrixArticle", "Attribut", "ValeurEntier", "ValeurTexte" FROM ((SELECT "ta"."id", "a"."libelle", "a"."prix", "att"."nom", COALESCE("ValeurEntier"."valeur",0) AS "ValeurEntier", " " AS "ValeurTexte" FROM "ValeurAttribut" AS "va3","ValeurAttribut" AS "va2","ValeurAttributEntier" AS "ValeurEntier","ValeurAttribut" AS "va","Attribut" AS "att","Article" AS "a","TypeArticle" AS "ta" WHERE ("va3"."id_Article"="a"."id") AND ("va2"."id_TypeArticle"="ta"."id") AND ("ValeurEntier"."id"="va"."id") AND ("ValeurEntier"."id_Article"="va"."id_Article") AND ("ValeurEntier"."id_TypeArticle"="va"."id_TypeArticle") AND ("va"."id_Attribut"="att"."id") AND ("att"."id_TypeArticle"="ta"."id") AND ("a"."id_TypeArticle"="ta"."id"))UNION(SELECT "ta"."id", "a"."libelle", "a"."prix", "att"."nom", 0 AS "ValeurEntier", COALESCE("ValeurTexte"."valeur",0) AS "ValeurTexte" FROM "ValeurAttribut" AS "va3","ValeurAttribut" AS "va2","ValeurAttributTexte" AS "ValeurTexte","ValeurAttribut" AS "va","Attribut" AS "att","Article" AS "a","TypeArticle" AS "ta" WHERE ("va3"."id_Article"="a"."id") AND ("va2"."id_TypeArticle"="ta"."id") AND ("ValeurTexte"."id"="va"."id") AND ("ValeurTexte"."id_Article"="va"."id_Article") AND ("ValeurTexte"."id_TypeArticle"="va"."id_TypeArticle") AND ("va"."id_Attribut"="att"."id") AND ("att"."id_TypeArticle"="ta"."id") AND ("a"."id_TypeArticle"="ta"."id"))) AS "tmp" WHERE "tmp"."id"=1;.
    Semantic error 485. Near: 0.
    Semantic error 226. Referenced column - id - not found.
    Semantic error 485. Near: CREATE VIEW "_SYSTEM"."Vue_4" AS SELECT "id", "Article", "PrixArticle", "Attribut", "ValeurEntier", "ValeurTexte" FROM ((SELECT "ta"."id", "a"."libelle", "a"."prix", "att"."nom", COALESCE("ValeurEntier"."valeur",0) AS "ValeurEntier", " " AS "ValeurTexte" FROM "ValeurAttribut" AS "va3","ValeurAttribut" AS "va2","ValeurAttributEntier" AS "ValeurEntier","ValeurAttribut" AS "va","Attribut" AS "att","Article" AS "a","TypeArticle" AS "ta" WHERE ("va3"."id_Article"="a"."id") AND ("va2"."id_TypeArticle"="ta"."id") AND ("ValeurEntier"."id"="va"."id") AND ("ValeurEntier"."id_Article"="va"."id_Article") AND ("ValeurEntier"."id_TypeArticle"="va"."id_TypeArticle") AND ("va"."id_Attribut"="att"."id") AND ("att"."id_TypeArticle"="ta"."id") AND ("a"."id_TypeArticle"="ta"."id"))UNION(SELECT "ta"."id", "a"."libelle", "a"."prix", "att"."nom", 0 AS "ValeurEntier", COALESCE("ValeurTexte"."valeur",0) AS "ValeurTexte" FROM "ValeurAttribut" AS "va3","ValeurAttribut" AS "va2","ValeurAttributTexte" AS "ValeurTexte","ValeurAttribut" AS "va","Attribut" AS "att","Article" AS "a","TypeArticle" AS "ta" WHERE ("va3"."id_Article"="a"."id") AND ("va2"."id_TypeArticle"="ta"."id") AND ("ValeurTexte"."id"="va"."id") AND ("ValeurTexte"."id_Article"="va"."id_Article") AND ("ValeurTexte"."id_TypeArticle"="va"."id_TypeArticle") AND ("va"."id_Attribut"="att"."id") AND ("att"."id_TypeArticle"="ta"."id") AND ("a"."id_TypeArticle"="ta"."id"))) AS "tmp" WHERE "tmp"."id"=1;.
    Semantic error 485. Near: "TypeArticle".
    Semantic error 226. Referenced column - Article - not found.
    Semantic error 226. Referenced column - PrixArticle - not found.
    Semantic error 226. Referenced column - Attribut - not found.
    Semantic error 226. Referenced column - ValeurEntier - not found.
    Semantic error 226. Referenced column - ValeurTexte - not found.
    Semantic error 116. Referenced TABLE - tmp - does not exist.
    Semantic error 485. Near: "tmp"."id".
    Semantic error 226. Referenced column - id - not found.
    Semantic error 217. Datatypes are not comparable or don't match.
    Semantic error 485. Near: 1.
    Exception 363 (40:000). Transaction rollback.
    Cordialement!!

  17. #17
    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
    Semantic error 226. Referenced column - Article - not found.
    Semantic error 226. Referenced column - PrixArticle - not found.
    Semantic error 226. Referenced column - Attribut - not found.
    Semantic error 226. Referenced column - ValeurEntier - not found.
    Semantic error 226. Referenced column - ValeurTexte - not found.
    Je n'avais pas vu que tu avais supprimé les alias des colonnes dans les sous-requêtes. Du coup la requête principale ne peut pas trouver Article, PrixArticle...

    Cette erreur ci :
    Semantic error 217. Datatypes are not comparable or don't match.
    est probablement due à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COALESCE(ValeurTexte.valeur, 0)
    Tu essaies de mettre une valeur numérique 0 dans une colonne de type texte.

    L'erreur qui m'inquiète un peu plus est celle-ci :
    Semantic error 485. Near: CREATE VIEW "_SYSTEM"."Vue_4" AS SELECT "id",
    Si c'est comme sous MySQL, Near: CREATE signifie que l'erreur se trouve juste avant CREATE. Comme cette partie de requête ne figure pas dans ton message, je ne peux pas interpréter l'erreur. Tu devrait essayer déjà la requête sans l'instruction CREATE VIEW pour voir si elle marche toute seule, et même les sous-requêtes indépendamment.

    Discours de la méthode : Quand tu as un gros problème, découpe le en plusieurs petits.

    J'ai corrigé ta requête. Si ça ne fonctionne pas, essaie d'abord les sous requêtes individuellement, puis fais l'union des deux, puis essaies un SELECT * en requête principale.
    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
    23
    SELECT  tmp.id, tmp.Article, tmp.PrixArticle,  tmp.Attribut, tmp.ValeurEntier, tmp.ValeurTexte
    FROM
    (SELECT ta.id AS id, a.libelle AS Article, a.prix AS PrixArticle, att.nom AS Attribut, COALESCE(ValeurEntier.valeur, 0) AS ValeurEntier,  " " AS ValeurTexte 
    FROM Article AS a
    INNER JOIN TypeArticle AS ta ON a.id_TypeArticle = ta.id
    INNER JOIN Attribut AS att ON att.id_TypeArticle = ta.id
    INNER JOIN ValeurAttribut AS va ON va.id_Attribut = att.id
    INNER JOIN ValeurAttributEntier AS ValeurEntier ON ValeurEntier.id = va.id AND ValeurEntier.id_Article = va.id_Article   AND ValeurEntier.id_TypeArticle = va.id_TypeArticle
    INNER JOIN ValeurAttribut AS va2 ON va2.id_TypeArticle = ta.id
    INNER JOIN ValeurAttribut AS va3 ON va3.id_Article = a.id
     
    UNION
     
    SELECT ta.id AS id, a.libelle AS Article, a.prix AS PrixArticle, att.nom AS Attribut, 0 AS ValeurEntier, COALESCE(ValeurTexte.valeur, "") AS ValeurTexte 
    FROM Article AS a
    INNER JOIN TypeArticle AS ta ON a.id_TypeArticle = ta.id
    INNER JOIN Attribut AS att ON att.id_TypeArticle = ta.id
    INNER JOIN ValeurAttribut AS va ON va.id_Attribut = att.id
    INNER JOIN ValeurAttributTexte AS ValeurTexte ON ValeurTexte.id = va.id AND ValeurTexte.id_Article = va.id_Article   AND ValeurTexte.id_TypeArticle = va.id_TypeArticle
    INNER JOIN ValeurAttribut AS va2 ON va2.id_TypeArticle = ta.id
    INNER JOIN ValeurAttribut AS va3 ON va3.id_Article = a.id
    ) AS tmp
    WHERE tmp.id = 1

  18. #18
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à CinePhil
    Donc je suis ton très bon conseil et je m'occupe de la première sous requête.

    Lorsque je fais cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT distinct ta.id AS id, a.libelle AS Article, a.prix AS PrixArticle, att.nom AS Attribut, COALESCE(ValeurEntier.valeur, 0) AS ValeurEntier
    FROM Article AS a
    INNER JOIN TypeArticle AS ta ON a.id_TypeArticle = ta.id
    INNER JOIN Attribut AS att ON att.id_TypeArticle = ta.id
    INNER JOIN ValeurAttribut AS va ON va.id_Attribut = att.id
    INNER JOIN ValeurAttributEntier AS ValeurEntier ON ValeurEntier.id = va.id AND ValeurEntier.id_Article = va.id_Article   AND ValeurEntier.id_TypeArticle = va.id_TypeArticle
    INNER JOIN ValeurAttribut AS va2 ON va2.id_TypeArticle = ta.id
    where ta.id = 1
    Voila ce que cela me donne :
    id / Article / PrixArticle / Attribut / ValeurEntier
    1 / Levis 501/ 45 / Taille / 36
    1 / Levis 501 / 45 / Taille / 38
    1 / sportwear / 12 / Taille / 36
    1 / sportwear / 12 / Taille / 38
    mais normalement il devrait y avoir une seul fois "sportwear" avec comme taille "38".

    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT distinct ta.id AS id, a.libelle AS Article, a.prix AS PrixArticle, att.nom AS Attribut, COALESCE(ValeurEntier.valeur, 0) AS ValeurEntier, " " as ValeurTexte
    FROM Article AS a
    INNER JOIN TypeArticle AS ta ON a.id_TypeArticle = ta.id
    INNER JOIN Attribut AS att ON att.id_TypeArticle = ta.id
    INNER JOIN ValeurAttribut AS va ON va.id_Attribut = att.id
    INNER JOIN ValeurAttributEntier AS ValeurEntier ON ValeurEntier.id = va.id AND ValeurEntier.id_Article = va.id_Article   AND ValeurEntier.id_TypeArticle = va.id_TypeArticle
    INNER JOIN ValeurAttribut AS va2 ON va2.id_TypeArticle = ta.id
    INNER JOIN ValeurAttribut AS va3 ON va3.id_Article = a.id
    where ta.id = 1
    voila les erreurs qui me sont généré :
    Semantic error 226. Referenced column - - not found.
    Semantic error 485. Near: SELECT DISTINCT "ta"."id" AS "id", "a"."libelle" AS "Article", "a"."prix" AS "PrixArticle", "att"."nom" AS "Attribut", COALESCE("ValeurEntier"."valeur",0) AS "ValeurEntier", " " AS "ValeurTexte" FROM "ValeurAttribut" AS "va3","ValeurAttribut" AS "va2","ValeurAttributEntier" AS "ValeurEntier","ValeurAttribut" AS "va","Attribut" AS "att","Article" AS "a","TypeArticle" AS "ta" WHERE ("va3"."id_Article"="a"."id") AND ("va2"."id_TypeArticle"="ta"."id") AND ("ValeurEntier"."id"="va"."id") AND ("ValeurEntier"."id_Article"="va"."id_Article") AND ("ValeurEntier"."id_TypeArticle"="va"."id_TypeArticle") AND ("va"."id_Attribut"="att"."id") AND ("att"."id_TypeArticle"="ta"."id") AND ("a"."id_TypeArticle"="ta"."id") AND ("ta"."id"=1);.
    Semantic error 485. Near: 0.
    Exception 363 (40:000). Transaction rollback.
    Cordialement

  19. #19
    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
    Je pense que cette erreur :
    Semantic error 226. Referenced column - - not found.
    Vient de là :
    Tu me diras : "C'est pas dur à trouver ! C'est tout ce qui a changé !"
    Essaie de ne pas mettre de blanc entre les deux guillemets :
    Et si ça ne marche toujours pas, essaie avec une paire d'apostrophe :

  20. #20
    Débutant  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Points : 353
    Points
    353
    Par défaut réponse à CinePhil
    Effectivement, j'avais rajouté un blanc entre les guillemets "" car sinon ça fonctionné pas. Puis j'avais essayé avec des apostrophes mais je ne l'avais pas fais sans blanc.

    Donc cela me donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT  distinct ta.id AS id, a.libelle AS Article, a.prix AS PrixArticle, att.nom AS Attribut, COALESCE(ValeurEntier.valeur, 0) AS ValeurEntier, '' AS ValeurTexte
    FROM Article AS a
    INNER JOIN TypeArticle AS ta ON a.id_TypeArticle = ta.id
    INNER JOIN Attribut AS att ON att.id_TypeArticle = ta.id
    INNER JOIN ValeurAttribut AS va ON va.id_Attribut = att.id
    INNER JOIN ValeurAttributEntier AS ValeurEntier ON ValeurEntier.id = va.id AND ValeurEntier.id_Article = va.id_Article   AND ValeurEntier.id_TypeArticle = va.id_TypeArticle
    INNER JOIN ValeurAttribut AS va2 ON va2.id_TypeArticle = ta.id
    INNER JOIN ValeurAttribut AS va3 ON va3.id_Article = a.id
    where ta.id = 1
    Mais par contre, j'ai toujours le même problème que tout à l'heure qui est le suivant :
    id / Article / PrixArticle / Attribut / ValeurEntier
    1 / Levis 501/ 45 / Taille / 36
    1 / Levis 501 / 45 / Taille / 38
    1 / sportwear / 12 / Taille / 36
    1 / sportwear / 12 / Taille / 38
    mais normalement il devrait y avoir une seul fois "sportwear" avec comme taille "38".
    En gros je devrais avoir que 3 lignes.

    Cordialement!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/05/2013, 16h33
  2. problème sur l'enregistrement d'une instance
    Par Génie dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 12/05/2006, 10h48
  3. problème de code javascript pour une vue 360°
    Par tomguiss dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/03/2006, 22h50
  4. Problème sur la réalisation d'une requête
    Par soso78 dans le forum Access
    Réponses: 1
    Dernier message: 06/10/2005, 13h17
  5. Erreur de syntaxe sur la création d'une vue.
    Par cgougeon dans le forum Installation
    Réponses: 3
    Dernier message: 09/09/2005, 11h00

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