[SQL] problème complexe de requête

problème complexe de requête [SQL] - SQL/NoSQL - Programmation

Marsh Posté le 22-01-2005 à 18:21:29    

Bonjour,
 
commençons par la table
 
-----------------------------------------------
id | isMaster | Master_id | Classe | Serie |
-----------------------------------------------
1 |___1___ |_________|______|
2 |___0___ |___1_____|___A__|
3 |___0___ |___1_____|___A__|
4 |___0___ |___3_____|______|___3
5 |___0___ |___3_____|______|___4
6 |___1___ |_________|______|
7 |___0___ |___6_____|___B__|
 
 
un id unique
un champ isMaster (0 pour non, 1 pour oui)
Master_id correspond à l'id du master
 
une hiérarchie (Master > Classe > Serie)
 
Voilà comment cela se passe:
Il s'agit de fonds financiers, un fond Master peut comporter ou pas plusieurs fond d'une certaine Classe
Un fond d'une certaine Classe peut comporter ou pas plusieurs fond d'une certaine Série
 
Le but de ma requête est, à partir de l'id d'un fond Master, de ramener toutes ses classes et leur séries rattachées
donc en fait, si isMaster = 1, il existe une ou plusieurs classes (dans le cas d'un fond Master) ou une ou plusieurs séries (dans le cas d'un fond de type Classe)
Mon problème est que je sais comment traduire un "si" en SQL.
Néanmoins si cela est impossible j'ai un programme derrière qui pourra m'aider à faire cela, mais j'aimerais savoir si une unique requête en SQL peut être réalisable
 
 
 
Je vous remercie !

Reply

Marsh Posté le 22-01-2005 à 18:21:29   

Reply

Marsh Posté le 22-01-2005 à 18:28:58    

si tu es sous Oracle, il y a la fonction DECODE.
Sinon, j'aurais déjà tendance à dire que ta table est mal golée... :heink:

Reply

Marsh Posté le 22-01-2005 à 19:10:03    

j'ai pensé à ça : que pensez-vous de ceci ?
 
chosen_id : id transmis à la requête
fond : nom de la table
 
 
SELECT * FROM fond
WHERE Master_id = chosen_id
UNION Master_id = chosen_id
UNION (Master_id = Masterd_id IN (SELECT * FROM fond WHERE Master_id = chosen_id))

Reply

Marsh Posté le 22-01-2005 à 20:03:15    

Pb de syntaxe...

Code :
  1. select *   --- les classes
  2.   from fond
  3. where master_id = chosen_id
  4. union
  5. select *   --- les series
  6.   from fond
  7. where master_id in (select id
  8.                        from fond
  9.                       where master_id = chosen_id)


Reply

Marsh Posté le 22-01-2005 à 20:16:12    

exact je te remercie

Reply

Marsh Posté le 24-01-2005 à 12:12:05    

Sous Oracle, il y a aussi et surtout le "connect by prior"

Reply

Marsh Posté le 03-02-2005 à 18:01:57    

Arjuna a écrit :

Sous Oracle, il y a aussi et surtout le "connect by prior"


merci arjuna, cette syntaxe vient de me rendre un fier service :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed