Besoin de conseil concernant cette requête SQL
Bonjour tout le monde,
Voici la structure de ma base :
Article(id, id_TypeArticle#, libelle, prix)
TypeArticle(id, libelle)
Attribut(id, nom, javaClasse, id_TypeArticle#)
ValeurAttribut(id, id_TypeArticle#, id_Article#, id_Attribut#)
ValeurAttributEntier(id#, id_TypeArticle#, id_Article#, valeur)
ValeurAttributTexte(id#, id_TypeArticle#, id_Article#,valeur)
=> les # signifie les clés étrangères et les champ soulignés sont les clés primaires.
Voici la requête de ma vue :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| SELECT Article, PrixArticle, Attribut, JavaClasse, id_ValeurAttribut, ValeurEntier, ValeurTexte
FROM
((SELECT a.libelle AS Article, a.prix AS PrixArticle, att.nom AS Attribut, att.javaClasse AS JavaClasse, va.id AS id_ValeurAttribut, ValeurEntier.valeur AS ValeurEntier, '' AS ValeurTexte
FROM Article AS a,Attribut AS att,ValeurAttribut AS va,ValeurAttributEntier AS ValeurEntier
WHERE att.id_TypeArticle=a.id_TypeArticle
AND va.id_Attribut=att.id
AND va.id_TypeArticle =a.id_TypeArticle
AND va.id_Article=a.id
AND ValeurEntier.id =va.id
AND ValeurEntier.id_Article=va.id_Article
AND ValeurEntier.id_TypeArticle=va.id_TypeArticle
AND ValeurEntier.id_TypeArticle=2
)
UNION
(SELECT a.libelle AS Article, a.prix AS PrixArticle, att.nom AS Attribut, att.JavaClasse AS JavaClasse, va.id AS id_ValeurAttribut, 0 AS ValeurEntier, ValeurTexte.valeur AS ValeurTexte
FROM Article AS a,Attribut AS att,ValeurAttribut AS va,ValeurAttributTexte AS ValeurTexte
WHERE att.id_TypeArticle=a.id_TypeArticle
AND va.id_Attribut=att.id
AND va.id_Article=a.id
AND va.id_TypeArticle=a.id_TypeArticle
AND va.id=ValeurTexte.id
AND ValeurTexte.id_Article=va.id_Article
AND ValeurTexte.id_TypeArticle=va.id_TypeArticle
AND ValeurTexte.id_TypeArticle=2
)) AS Vue_Motos |
Il y a une question qui me turlupine le cerveau : cela fonctionne parfaitement mais as-t'on le droit de faire une jointure entre 2 clés étrangères?? plus précisément cette ligne est-elle règlementaire :
Code:
WHERE att.id_TypeArticle=a.id_TypeArticle
Merci d'avance pour vos réponse!