IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Connect by trouver les feuilles


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de comrad85
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 188
    Par défaut Connect by trouver les feuilles
    Bonjour a tous,
    j'ai une table "personnes" dont les champs sont : numero, nom, pernom, datenaissance, pere, mere (pere et mere dont des numéros).
    c'est un arbre hiérarchique qui représente les ancetres et les descendants.
    pour trouver les ancetres ou les descendants d'une personne, j'ai réussi à le faire en utilisant "connect by prior ".
    Mais j'aimerai maintenant trouvé les personnes qui n'ont pas d'enfants c.a.d les feuilles de l'arbre.
    j'ai essayé de commencé par les ancetres (c.a.d les personnes dont le champ pere et mere est vide), et descendre jusqu'au feuilles en utilisant "level" mais ca donne pas de bon résultats.
    Si quelqu'un a une petite idée ca serait cool!
    Merci a vous

  2. #2
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    Bonjour

    Si j'ai bien compris la question, il n'y a pas besoin de parcours hiérarchique.
    Une personne sans enfant n'est le père ou la mère de personne. Autrement dit, elle ne fait pas partie de l'ensemble des parents.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select * from personne
    where id_personne not in (select pere from personne union select mere from personne);

  3. #3
    Membre confirmé Avatar de comrad85
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 188
    Par défaut
    Salut,
    Merci pour la réponse.
    Si j'ai bien compris la question, il n'y a pas besoin de parcours hiérarchique.
    C'est un exercice que j'ai trouvé sur un sujet d'examen et on demande de le faire avec un parcours hiérarchique.

    J'ai essayé de faire un "start with" à partir des personnes qui se trouvent au sommet de la hiérarchie (dont pere et mere sont null) et de descendre pour trouvé les feuilles (avec level) mais ca marche pas!!!
    Si vous voulez je peux vous donner la table!
    Merci

  4. #4
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    CONNECT_BY_ISLEAF Pseudocolumn 
    The CONNECT_BY_ISLEAF pseudocolumn returns 1 if the current row is a leaf 
    of the tree defined by the CONNECT BY condition. Otherwise it returns 0. 
    This information indicates whether a given row can be further expanded to 
    show more of the hierarchy. 
    exemple :
    conn hr/hr
     
    SELECT last_name "Employee", CONNECT_BY_ISLEAF "IsLeaf",
    LEVEL, SYS_CONNECT_BY_PATH(last_name, '/') "Path"
    FROM employees
    WHERE level <= 3
    AND department_id = 80
    START WITH last_name = 'King'
    CONNECT BY PRIOR employee_id = manager_id
    AND LEVEL <= 4;
    Tester avec 10g (la condition CONNECT_BY_ISLEAF =1 pour detecter les feuilles)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    SQL> SELECT DEPTNO,EMPNO,ENAME,SAL,MGR,LEVEL,CONNECT_BY_ISLEAF FEUILLE
      2  FROM EMP 
      3  CONNECT BY PRIOR EMPNO=MGR
      4  START WITH MGR IS NULL
      5  ORDER BY LEVEL;
     
        DEPTNO      EMPNO ENAME             SAL        MGR      LEVEL    FEUILLE
    ---------- ---------- ---------- ---------- ---------- ---------- ----------
            10       7839 KING             5000                     1          0
            20       7566 JONES            2975       7839          2          0
            30       7698 BLAKE            2850       7839          2          0
            10       7782 CLARK            2450       7839          2          0
            20       7902 FORD             3000       7566          3          0
            30       7521 WARD             1250       7698          3          1
            30       7900 JAMES             950       7698          3          1
            10       7934 MILLER           1300       7782          3          1
            30       7499 ALLEN            1600       7698          3          1
            20       7788 SCOTT            3000       7566          3          0
            30       7654 MARTIN           1250       7698          3          1
     
        DEPTNO      EMPNO ENAME             SAL        MGR      LEVEL    FEUILLE
    ---------- ---------- ---------- ---------- ---------- ---------- ----------
            30       7844 TURNER           1500       7698          3          1
            20       7876 ADAMS            1100       7788          4          1
            20       7369 SMITH             800       7902          4          1
     
    14 rows selected.
     
    SQL> SELECT DEPTNO,EMPNO,ENAME,SAL,MGR,LEVEL,CONNECT_BY_ISLEAF FEUILLE
      2  FROM EMP 
      3  WHERE CONNECT_BY_ISLEAF =1
      4  CONNECT BY PRIOR EMPNO=MGR
      5  START WITH MGR IS NULL
      6  ORDER BY level;
     
        DEPTNO      EMPNO ENAME             SAL        MGR      LEVEL    FEUILLE
    ---------- ---------- ---------- ---------- ---------- ---------- ----------
            30       7521 WARD             1250       7698          3          1
            30       7900 JAMES             950       7698          3          1
            30       7499 ALLEN            1600       7698          3          1
            10       7934 MILLER           1300       7782          3          1
            30       7654 MARTIN           1250       7698          3          1
            30       7844 TURNER           1500       7698          3          1
            20       7369 SMITH             800       7902          4          1
            20       7876 ADAMS            1100       7788          4          1
     
    8 rows selected.
     
    SQL>

  5. #5
    Membre confirmé Avatar de comrad85
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 188
    Par défaut
    merci!!!!!!!!!!!!

Discussions similaires

  1. trouver les IP de clients connectées au serveur dhcp
    Par ykhalildie dans le forum RedHat / CentOS / Fedora
    Réponses: 0
    Dernier message: 02/05/2013, 17h29
  2. Réponses: 0
    Dernier message: 08/12/2008, 14h50
  3. [GUI] Ou trouver les standard ?
    Par Braim dans le forum Windows
    Réponses: 5
    Dernier message: 01/10/2003, 08h13
  4. [VB6] Quitter l'appli et fermer toutes les feuilles...
    Par The Bob dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 10/06/2003, 21h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo