arnoldjf
Messages postés1Date d'inscriptionjeudi 10 décembre 2009StatutMembreDernière intervention29 décembre 2010
-
29 déc. 2010 à 09:21
cs_Robert33
Messages postés834Date d'inscriptionsamedi 15 novembre 2008StatutMembreDernière intervention14 janvier 2017
-
31 déc. 2010 à 15:53
Bonjour
Mon problème :
J'ai 2 tables de donnée.
La première est la table chapitre qui comprend un index (chap_index)
La seconde table est la base paragraphe qui comprend un lien vers les chapitre pour indiquer l'appartenance (para_chap_index) et une colonne option .
Il existe au moins un paragraphe par chapitre (avec l'option base).
Pour les autres options, des lignes complémentaires sont rajoutées dans la table paragraphe.
Mon objectif est de faire une requête qui récupère les paragraphes de l'ensemble des chapitre suivant certaines option (et si pour un paragraphe donnée, il n'y a pas l'option correspondante, prendre le paragraphe qui a l'option base).
J'ai essayé de nombreuses possibilités mais je ne trouve rien.
cs_Robert33
Messages postés834Date d'inscriptionsamedi 15 novembre 2008StatutMembreDernière intervention14 janvier 201733 31 déc. 2010 à 15:53
Bonjour
En effet, c'est un probleme récurent...
il faut utiliser 2 requetes, la premiere donne le résultat avec les options choisies,
la deuxieme recherche avec l'option par défaut dans ce qui n'a pas été trouvé dans la premiere.
Bon c'est pas clair comme explication, alors voila un exemple:
Table Chapitre : clef:{chap_index (int)}, titrre (carvhar 50)
Table paragraphes : clef {para_chap_index(int), paragrpahe (int)} Titre (varchar 50), option (int)
je supose que la valeur 0 dans 'option' indique le paragraphe par défaut.
-- la premiere selectionne avec les options voulues (3 ou 4)
SELECT Chapitre.chap_index, Chapitre.titre, paragraphe.Paragraphe, paragraphe.Titre AS Expr1
FROM paragraphe
INNER JOIN Chapitre ON paragraphe.para_chap_index = Chapitre.chap_index
WHERE (paragraphe.option IN (3, 4))
UNION
-- la deuxieme recherche les chapitres par defaut dont les paragraphes n'ont pas été retournées par la premiere
SELECT Chapitre.chap_index, Chapitre.titre, paragraphe.Paragraphe, paragraphe.Titre AS Expr1
FROM paragraphe
INNER JOIN Chapitre ON paragraphe.para_chap_index = Chapitre.chap_index
WHERE (paragraphe.option = 0) -- option par defaut
AND (NOT (Chapitre.chap_index IN
(SELECT para_chap_index FROM paragraphe WHERE (option IN (3, 4)) GROUP BY para_chap_index))) -- idem la premiere, mais plus compacte