Choix avec option

arnoldjf Messages postés 1 Date d'inscription jeudi 10 décembre 2009 Statut Membre Dernière intervention 29 décembre 2010 - 29 déc. 2010 à 09:21
cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 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.

D'avance Merci pour votre aide

1 réponse

cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
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


Bob.
C# is amazing, enjoy it!
0
Rejoignez-nous