Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 07/07/2011, 11h56   #1
Invité de passage
 
Jean-Michel DUVAL
Inscription : octobre 2010
Messages : 5
Détails du profil
Informations personnelles :
Nom : Jean-Michel DUVAL

Informations forums :
Inscription : octobre 2010
Messages : 5
Points : 0
Points : 0
Par défaut Requête récursive avec jointure

Bonjour à tous,

Je bute depuis deux jours sur un problème SQL qui paraît pourtant très simple.
Aussi, je viens vous solliciter pour un peu d'aide.

J'ai une table VERDOC qui contient des versions de document avec un lien réflexif (annule et remplace)

PK_VER_MAJ, PK_VER_MIN, FK_VER_MAJ, FK_VER_MIN
1, 0, Null, Null   // 1ere version
1, 1, 1, 0         // La version 1.1 remplace la 1.0
1, 2, 1, 1         // etc
2, 0, 1, 2
J'ai une table INVERDOC qui pointe sur une version de document
PK_CODE, FK_VER_MAJ, FK_VER_MIN
TEST10, 1, 0 
TEST11, 1, 1
TEST20, 2, 0
Ma requête doit ramener toutes les versions antérieures à celle pointée par la seconde table avec PK_CODE en première colonne
TEST10, 1, 0
TEST11, 1, 1
TEST11, 1, 0
TEST20, 2, 0
TEST20, 1, 2
TEST20, 1, 1
TEST20, 1, 0
J'ai essayé avec un CONNECT BY et START WITH sur la table VERDOC qui me ramène bien les versions de document antérieures à une certaine version mais je n'arrive pas à l'imbriquer avec INVERDOC pour avoir le bon résultat.

Merci pour votre aide.
Cdt
Jm
Jmdu_44fr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 12h14   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 433
Points : 10 433
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Pas besoin de récursion :
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
29
30
31
32
WITH VERDOC AS
(
SELECT 1 PK_VER_MAJ, 0 PK_VER_MIN, NULL FK_VER_MAJ, NULL FK_VER_MIN FROM dual union ALL
SELECT 1           , 1           , 1              , 0               FROM dual union ALL
SELECT 1           , 2           , 1              , 1               FROM dual union ALL
SELECT 2           , 0           , 1              , 2               FROM dual
)
 , INVERDOC AS
(
SELECT 'TEST10' PK_CODE, 1 FK_VER_MAJ, 0 FK_VER_MIN FROM dual union ALL
SELECT 'TEST11'        , 1           , 1            FROM dual union ALL
SELECT 'TEST20'        , 2           , 0            FROM dual
)
  SELECT ivd.PK_CODE
       , vdc.PK_VER_MAJ
       , vdc.PK_VER_MIN
    FROM INVERDOC ivd
         INNER JOIN VERDOC vdc
           ON vdc.PK_VER_MAJ * 100 + vdc.PK_VER_MIN <= ivd.FK_VER_MAJ * 100 + ivd.FK_VER_MIN
ORDER BY ivd.PK_CODE     ASC
       , vdc.PK_VER_MAJ DESC
       , vdc.PK_VER_MIN DESC;
 
PK_COD PK_VER_MAJ PK_VER_MIN
------ ---------- ----------
TEST10          1          0
TEST11          1          1
TEST11          1          0
TEST20          2          0
TEST20          1          2
TEST20          1          1
TEST20          1          0
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2011, 15h10   #3
Invité de passage
 
Jean-Michel DUVAL
Inscription : octobre 2010
Messages : 5
Détails du profil
Informations personnelles :
Nom : Jean-Michel DUVAL

Informations forums :
Inscription : octobre 2010
Messages : 5
Points : 0
Points : 0
Je vous remercie pour votre aide en effet, j’obtiens exactement ce que je souhaitais.

Et je n'avais pas percuté que mes clefs étaient des numériques ce qui simplifie drôlement la problématique : Comme quoi un oeil extérieur est toujours profitable.

Encore Merci

Cdt
JeanMichel
Jmdu_44fr est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h47.


 
 
 
 
Partenaires

Hébergement Web