Requètes imbriqués et conditions

Résolu
pandi-panda -  
 pandi-panda -
Bonjour,

Je suis actuellement entrain de créer une base de données contenant les tables suivantes :
Boissons(Id_boisson, Nom_boisson, Qte_Boisson, prix_Boisson);
Boissonsalcoolisee(Id_boisson, DegreeAlcool);
Boissonsnonalcoolisee(Id_boisson, DegreeSucre);


Voila je pense que vous avez compris le principe une table regroupant toutes les boissons puis 2 tables completants la table boisson selon qu'elles soient alcoolisés ou non.


Mon problème est le suivant :


Je voudrai afficher tous les champs d'une boisson qui la concerne ( champs degreealcool si elle est alcoolisée ou degreesucre si elle ne l'est pas)

J'ai essayé des requètes imbriqués mais je n'arrive à aucun résultats, si vous pouviez m'aider.

Merci d'avance

1 réponse

jee pee Messages postés 41515 Date d'inscription   Statut Modérateur Dernière intervention   9 717
 
Salut,

La solution c'est la jointure externe qui ramène l'enregistrement d'une table même sans correspondance dans une seconde.

Sous oracle je mettrais :

Select A.Id_boisson, Nom_boisson, Qte_Boisson, prix_Boisson, DegreeAlcool, DegreeSucre
From Boissons A , Boissonsalcoolisee B , Boissonsnonalcoolisee C
where A.id_boisson=B.id_boisson(+)
and A.id_boisson=C.id_boisson(+)
/

Le (+) représente la jointure externe sous Oracle.

cdlt

Un étranger, c'est un ami qu'on n'a pas encore rencontré.
1
pandi-panda
 
Merci pour ta reponse mais en fait le souci c'est que par exemple :
La boisson jus d'orange aura un Degree de sucre mais pas d'alcool et du coup y a un problème avec la table boissonsnonalcoolisee qui est vide pour cette boisson.
Avec cette requète Sql ne me renvoie aucune ligne.
Je sais si j'ai suis trés clair ?

Merci
0
jee pee Messages postés 41515 Date d'inscription   Statut Modérateur Dernière intervention   9 717
 
Si.

Mais c'est bien pourquoi les jointures externes existent.

C'est cette piste qu'il faut suivre, avec la syntaxe propre à ton sgbd, que tu n'as pas précisé.
0
pandi-panda
 
Salut,

tu avais en effet raison il fallait utiliser la jointure externe (left outer join sous Mysql).

Merci de ton aide.
0