Requete SQL ?

Requete SQL ? - SQL/NoSQL - Programmation

Marsh Posté le 23-03-2006 à 14:41:39    

Bonjour,
 
Je suis confronté à un petit probleme. J'espère que vous pourrez m'illumnier un petit peu ;-)
 
Ma table :

Code :
  1. +----+-----+---------+
  2. | ID | SID | LIBELLE |
  3. +----+-----+---------+
  4. | 01 | 00  | LIB N01 |
  5. | 02 | 01  | LIB N02 |
  6. | 03 | 02  | LIB N03 |
  7. | 04 | 00  | LIB N04 |
  8. | 05 | 00  | LIB N05 |
  9. | 06 | 03  | LIB N06 |
  10. | 07 | 00  | LIB N07 |
  11. | 08 | 00  | LIB N08 |
  12. | 09 | 00  | LIB N09 |
  13. | 10 | 00  | LIB N10 |
  14. | 11 | 09  | LIB N11 |
  15. | 12 | 00  | LIB N12 |
  16. | 13 | 01  | LIB N13 |
  17. | 14 | 12  | LIB N14 |
  18. | 15 | 00  | LIB N15 |
  19. +----+-----+---------+


 
SID = id parent
--> le parent de LIB N06 c'est LIB N03
 
Comment récupérer tous les parents d'un record ?
--> pour récupérer tous les parents de LIB06, comment faire ?
 
Avoir ceci dans le recordset: (pour LIB06 et tous ses parents)

Code :
  1. +---------+
  2. | LIBelle |
  3. +---------+
  4. | LIB N06 |
  5. | LIB N03 |
  6. | LIB N02 |
  7. | LIB N01 |
  8. +---------+


 
Je ne sais pas si c'est possible de faire ceci en une seule requete SQL mais perso je n'y arrive pas.
Donc si cela est possible, quelqu'un peut me mettre sur la piste svp ?
 
D'avance merci pour votre aide...

Reply

Marsh Posté le 23-03-2006 à 14:41:39   

Reply

Marsh Posté le 23-03-2006 à 15:45:38    

J'ai pas les moyens de tester, mais ca ne me parait pas possible en une seule requete.
 
Le plus simple c'est de l'avoir en ligne (avec 4 colonnes) mais je ne pense pas que ça soit ce que tu recherches ?
Et le problème de cette solution est qu'il faut que tu fixes le nombre de colonnes alors que j'imagine que le nombre de parents n'est pas toujours le même ?
 

Reply

Marsh Posté le 23-03-2006 à 15:48:37    

Le faire en plusieurs requete SQL c'est sans problème, mais je pense que si il y a beaucoup de parents, ca deviendra vite lourd.
 
Oui le nombre de parents est indéfini, il peut y en avoir 3 comme 50.
 
La solution serait de pecher l'idscat du 6 pour aller rechercher l'idscat du parent, si différent de 0 on prend l'idscat du parent pour aller chercher son pere et ainsi de suite ;)
 
Merci quand même...

Reply

Marsh Posté le 23-03-2006 à 15:51:04    

En en passant par une procédure ? tu pourras faire tes conditions.

Reply

Marsh Posté le 23-03-2006 à 22:48:32    

C'est avec mySql ? SQL Server ? Oracle ?
 
Avec Oracle on peut faire des requêtes récursives donc c'est possible et simple, pour les autres je les connais moins ...

Reply

Marsh Posté le 24-03-2006 à 10:57:35    

Beegee a écrit :

C'est avec mySql ? SQL Server ? Oracle ?
 
Avec Oracle on peut faire des requêtes récursives donc c'est possible et simple, pour les autres je les connais moins ...


 
 
Ca m'intéresse de voir comment tu fais avec Oracle. merci

Reply

Marsh Posté le 24-03-2006 à 11:02:31    

dlaumor a écrit :

Ca m'intéresse de voir comment tu fais avec Oracle. merci


 
J'ai trouvé en cherchant un peu un truc du genre ?
 


      SELECT LIbelle
      FROM MA_TABLE
      STAR WITH SID = 0
      CONNECT BY PRIOR ID = SID


 
C'est bien cool ca, j'auria appris un truc

Reply

Marsh Posté le 24-03-2006 à 11:08:36    

Code :
  1. DROP TABLE maTable;
  2. CREATE TABLE maTable
  3. (ID VARCHAR2(10),
  4. SID VARCHAR2(10),
  5. LIBELLE VARCHAR2(100));
  6. INSERT INTO maTable VALUES ('01', '00', 'LIB N01');
  7. INSERT INTO maTable VALUES ('02', '01', 'LIB N02');
  8. INSERT INTO maTable VALUES ('03', '02', 'LIB N03');
  9. INSERT INTO maTable VALUES ('04', '00', 'LIB N04');
  10. INSERT INTO maTable VALUES ('05', '00', 'LIB N05');
  11. INSERT INTO maTable VALUES ('06', '03', 'LIB N06');
  12. INSERT INTO maTable VALUES ('07', '00', 'LIB N07');
  13. INSERT INTO maTable VALUES ('08', '00', 'LIB N08');
  14. INSERT INTO maTable VALUES ('09', '00', 'LIB N09');
  15. INSERT INTO maTable VALUES ('10', '00', 'LIB N10');
  16. INSERT INTO maTable VALUES ('11', '09', 'LIB N11');
  17. INSERT INTO maTable VALUES ('12', '00', 'LIB N12');
  18. INSERT INTO maTable VALUES ('13', '01', 'LIB N13');
  19. INSERT INTO maTable VALUES ('14', '12', 'LIB N14');
  20. INSERT INTO maTable VALUES ('15', '00', 'LIB N15');
  21. COMMIT;
  22. SELECT libelle FROM maTable
  23. CONNECT BY PRIOR SID = ID
  24. START WITH libelle = 'LIB N06';

Reply

Marsh Posté le 24-03-2006 à 14:32:51    

merci ;)

Reply

Sujets relatifs:

Leave a Replay

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