Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/05/2004, 15h09   #1
Nouveau Membre du Club
 
Inscription : avril 2004
Messages : 70
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 70
Points : 28
Points : 28
Par défaut récursivité

un autre probleme sous postgresql,
gere t'il correctement la récursivité ?

Car il me sort n'importe quoi quand je tente de faire ce genre de requêtes :

Code :
1
2
3
4
5
6
7
8
9
 
SELECT *
FROM Materiel M1, Materiel M2, Materiel M3, Materiel M4
WHERE 
M1.MAT_CODE = M2.MAT_CODE_Recur
AND
M2.MAT_CODE = M3.MAT_CODE_Recur
AND
M3.MAT_CODE = M4.MAT_CODE_Recur;
Pourtant ca fonctionne bien sous Oracle (même si le système des levels est netement plus opti...)
__________________
Etant donné que la vitesse de la lumière est nettement supérieure à la vitesse du son, c'est sûrement pour ça que certains paraissent brillants avant d'ouvrir leurs gueules...
www.eldrenn.com ou www.eldrenn.net
krimson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2004, 15h31   #2
Membre actif
 
Inscription : juin 2003
Messages : 209
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 209
Points : 189
Points : 189
C'est quoi la réfléxibilité (qui n'existe pas comme mot)??? Tu es sûr que tu ne parles pas de la récursivité??? :
Bouboubou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2004, 16h13   #3
Invité de passage
 
Inscription : mai 2004
Messages : 7
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 7
Points : 2
Points : 2
J'aurais tendance à penser qu'il s'agit de réflexivité mais bon...
internet_killer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2004, 16h31   #4
Nouveau Membre du Club
 
Inscription : avril 2004
Messages : 70
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 70
Points : 28
Points : 28
pardonnez ce copier coller montrueux que j'ai fait dans un coup de speed qui me vaut la honte
Non serieux, c'est pas ca qui resoud mon problème mais ca navre quand même.
__________________
Etant donné que la vitesse de la lumière est nettement supérieure à la vitesse du son, c'est sûrement pour ça que certains paraissent brillants avant d'ouvrir leurs gueules...
www.eldrenn.com ou www.eldrenn.net
krimson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2004, 16h48   #5
Membre actif
 
Inscription : juin 2003
Messages : 209
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 209
Points : 189
Points : 189
Je suis désolé mais je ne comprends rien! Ton problème c'est quoi pour finir?
Bouboubou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2004, 17h05   #6
Nouveau Membre du Club
 
Inscription : avril 2004
Messages : 70
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 70
Points : 28
Points : 28
A signaler tiens, le mot réflexif existe dans Merise et veux dire la même chose.

Le problème pour y revenir, le voici
Eh bien j'ai créé une table matériel.

Un matériel , pouvant être un PC par exemple et également une carte mère, un processeur ou que sais-je encore, je l'ai défini récursive.

Quand on fait sous Oracle la requête :
Code :
1
2
3
4
5
6
7
8
9
 
SELECT * 
FROM Materiel M1, Materiel M2, Materiel M3, Materiel M4 
WHERE 
M1.MAT_CODE = M2.MAT_CODE_Recur 
AND 
M2.MAT_CODE = M3.MAT_CODE_Recur 
AND 
M3.MAT_CODE = M4.MAT_CODE_Recur;
Cela permet de ressortir les infos sur toutes les recrussions

Et le problème sous PostgreSQL c'est qu'il me sort n'importe quoi (genre 5 fois les mêmes champs...)

Ma question était, ma requête pour PostgreSQL est t'elle fausse, si oui, comment faire
__________________
Etant donné que la vitesse de la lumière est nettement supérieure à la vitesse du son, c'est sûrement pour ça que certains paraissent brillants avant d'ouvrir leurs gueules...
www.eldrenn.com ou www.eldrenn.net
krimson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2004, 18h18   #7
Membre actif
 
Inscription : juin 2003
Messages : 209
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 209
Points : 189
Points : 189
J'ai fait un exemple. C'est bien ce que tu cherches à faire?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
scratch=# \d matos
            TABLE "public.matos"
 COLUMN |         Type          | Modifiers
--------+-----------------------+-----------
 id     | integer               | NOT NULL
 id_cur | integer               |
 nom    | character varying(30) |
Indexes:
    "matos_pkey" PRIMARY KEY, btree (id)
 
scratch=# select * from matos;
 id | id_cur |    nom
----+--------+------------
  0 |        | PC
  1 |      0 | carte mère
  2 |      0 | carte son
  3 |      0 | écran
  4 |      1 | processeur
(5 rows)
 
scratch=# select m1.nom,m2.nom from matos m1, matos m2 where m1.id = m2.id_cur
AND m1.id = 0;
 nom |    nom
-----+------------
 PC  | carte mère
 PC  | carte son
 PC  | écran
(3 rows)
Bouboubou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2004, 19h24   #8
Membre actif
 
Inscription : juin 2003
Messages : 209
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 209
Points : 189
Points : 189
T'es sur que ton problème ne vient pas du fait que tu ne fais pas de projection dans ta requête?
Bouboubou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2004, 09h30   #9
Nouveau Membre du Club
 
Inscription : avril 2004
Messages : 70
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 70
Points : 28
Points : 28
Hop, aller une nouvelle journée de taf.
Merci je vais regarder ca et je te dis...
__________________
Etant donné que la vitesse de la lumière est nettement supérieure à la vitesse du son, c'est sûrement pour ça que certains paraissent brillants avant d'ouvrir leurs gueules...
www.eldrenn.com ou www.eldrenn.net
krimson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2004, 11h52   #10
Nouveau Membre du Club
 
Inscription : avril 2004
Messages : 70
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 70
Points : 28
Points : 28
Ok ! c'est bon,
c'etait finalement une erreur de mon tuteur de stage...

voila ce qui c'est passé,
j'ai une table materiel :

Code :
1
2
3
4
5
6
7
8
 
MAT_CODE     | MAT_CODE_RECU        |  MAT_LIBELLE
-------------+----------------------+----------------
           1 |                 NULL |      PC
           2 |                    1 |      Carte mere
           3 |                    2 |      Processeur
           4 |                    1 |      Clavier
           5 |                 NULL |      Serveur
et lui voulait faire cette requête :

Code :
1
2
3
4
 
SELECT *						
FROM Materiel M1, Materiel M2,Materiel M3, .....		
WHERE M.MAT_CODE = M2.MAT_CODE_R (+)
Evidement vu que (+) ne fonctionne pas sous postgres...
ca ne reviens pas a faire ca :

Code :
1
2
3
4
5
6
7
8
9
 
SELECT * 
FROM Materiel M1, Materiel M2, Materiel M3, Materiel M4 
WHERE 
M1.MAT_CODE = M2.MAT_CODE_RECU
AND 
M2.MAT_CODE = M3.MAT_CODE_RECU
AND 
M3.MAT_CODE = M4.MAT_CODE_RECU;
Avec une bonne nuit de sommeil, la je me rend compte de cette connerie enorme !
bon maintenant il faut que je trouve l'équivalant mon idée c'est :

Code :
1
2
3
4
5
6
 
SELECT 						
m1.MAT_LIBELLE , m2.MAT_LIBELLE
FROM 
Materiel m1 RIGHT JOIN Materiel m2 ON
m1.MAT_CODE = m2.MAT_CODE_RECU
Mais je ne peut pas aller a plus de 2 niveaux...
Lui me dis de passer par Union je ne sais pas si ca va le faire...
__________________
Etant donné que la vitesse de la lumière est nettement supérieure à la vitesse du son, c'est sûrement pour ça que certains paraissent brillants avant d'ouvrir leurs gueules...
www.eldrenn.com ou www.eldrenn.net
krimson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2004, 13h36   #11
Membre actif
 
Inscription : juin 2003
Messages : 209
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 209
Points : 189
Points : 189
Non, tu peux faire cela sur 3 niveaux... par exemple, en reprenant mon exemple:

Code :
1
2
3
4
5
6
7
8
scratch=# select m1.nom,m2.nom,m3.nom from matos m1 right join (matos m2 left j
oin matos m3 ON m2.id=m3.id_cur) ON m2.id_cur = m1.id WHERE m1.id=0;
 nom |    nom     |    nom
-----+------------+------------
 PC  | carte mère | processeur
 PC  | carte son  |
 PC  | écran      |
(3 rows)
Mais si tu veux une vrai récursivité, il faut implémenter cela de manière totalement différente. Voir le problème avec des arbres... tu peux lire ce bout de théorie dans le livre de Frédéric Brouard qui je crois!

A+
Bouboubou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2004, 13h39   #12
Membre actif
 
Inscription : juin 2003
Messages : 209
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 209
Points : 189
Points : 189
et comme cela sans jointure externe:

Code :
1
2
3
4
5
6
scratch=# select m1.nom,m2.nom,m3.nom from matos m1, matos m2, matos m3 where m
1.id=m2.id_cur AND m2.id = m3.id_cur AND m1.id = 0;
 nom |    nom     |    nom
-----+------------+------------
 PC  | carte mère | processeur
(1 row)
Bouboubou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2004, 15h54   #13
Nouveau Membre du Club
 
Inscription : avril 2004
Messages : 70
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 70
Points : 28
Points : 28
Ok ca fonctionne bien merci.
Pour la théorie des arbres, esque tu parle des R-tree ou esce autre chose ?
En gros je dois me doter du livre de ce M. Frédéric Brouard quoi ...
__________________
Etant donné que la vitesse de la lumière est nettement supérieure à la vitesse du son, c'est sûrement pour ça que certains paraissent brillants avant d'ouvrir leurs gueules...
www.eldrenn.com ou www.eldrenn.net
krimson est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h19.


 
 
 
 
Partenaires

Hébergement Web