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 :

Quelle requête dans le cas d'une association réflexive ?


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Points : 9
    Points
    9
    Par défaut Quelle requête dans le cas d'une association réflexive ?
    Bonjour,

    J'essais depuis quelques jours d' écrire une requête qui a pour but de trouver le nom de l'espèce d'un père (ou d'une mère) d'un individu bien identifié.
    IL s'agit d'une relation réflexive, puisque le père et la mère sont aussi des individus.

    Voici les tables en question:
    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
    --  la table Espece
     
    CREATE TABLE Espece
    ( 
      codeEspece 		VARCHAR2(20), 
      nomEspece		VARCHAR2(20) NOT NULL, 
     
      CONSTRAINTS Espece_pk PRIMARY KEY (codeEspece),
      UNIQUE(nomEspece),	
    );
     
    -- table Individu
     
    CREATE TABLE Individu
    ( 
      codeIndividu		VARCHAR2(10), 
      nomIndividu 		VARCHAR2(20) NOT NULL, 
      codeEspece		VARCHAR2(10), 
      pere			VARCHAR2(20), 
      mere			VARCHAR2(20),
     
      CONSTRAINTS Individu_pk PRIMARY KEY (codeIndividu),
      CONSTRAINTS Individu_fk FOREIGN KEY (codeEspece) REFERENCES Espece (codeEspece) ON DELETE CASCADE,
      CONSTRAINTS Individu_pere FOREIGN KEY (pere) REFERENCES Individu (codeIndividu),  -- un père est un individu
      CONSTRAINTS Individu_mere FOREIGN KEY (mere) REFERENCES Individu (codeIndividu) -- une mère est un individu
    );
    Par exemple , pour un individu qui s'appelle King :

    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
    Ses données dans la table Individu:
     
      codeIndividu		ABC123 
      nomIndividu 		King
      codeEspece		Chien005
      pere			ABC004 
      mere			ABC027
     
     
    Et les parents de king: 
     
    - son pere :
     
      codeIndividu		ABC004
      nomIndividu 		Loulou
      codeEspece		Chien005
      pere			null
      mere			null
     
     
    - sa mère :
     
      codeIndividu		ABC027
      nomIndividu 		Mimi
      codeEspece		Chien005
      pere			null
      mere			null
     
     
    Les 3 individus ont les mêmes données dans la table Espece:
     
      codeEspece 		Chien005, 
      nomEspece		Berger_allemand,
    Voilà, disons que les données des parents de King sont inconnues, comment je fais pour retourner seulement le nomEspece de pere de king ?

    J'ai essayé avec cette requête, mais sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select nomEspece
    From Espece E, Individu I 
    Where I.pere = I.codeIndividu  AND  (codeEspece de I.pere) = E.codeEspece
    J'ai de la difficulté à exprimer (codeEspece de I.pere).


    Merci de m'aider !!!

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Pour connaître l'espèce des parents, en n'étant pas toujours certain de connaître les parents ou leur espèce, tu peux utiliser une requête sur ce modèle :
    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
    SELECT  ind.codeIndividu
        ,   spi.nomEspece
        ,   per.codeIndividu
        ,   spp.nomEspece
        ,   mer.codeIndividu
        ,   spm.nomEspece
    FROM    individu    ind --  l'individu
        INNER JOIN
            espece      spi --  l'espèce de l'individu
            ON  spi.codeEspece  = ind.codeEspece
        LEFT JOIN
            individu    per --  le père
            ON  per.codeIndividu = ind.pere
        LEFT JOIN
            espece      spp --  l'espèce du père
            ON  spp.codeEspece  = per.codeEspece
        LEFT JOIN
            individu    mer --  la mère
            ON  mer.codeIndividu = ind.mere
        LEFT JOIN
            espece      spm --  l'espèce de la mère
            ON  spm.codeEspece  = mer.codeEspece
    ;
    A partir de là, je te laisse construire le reste de ta requête
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

Discussions similaires

  1. Requête spéciale dans le cas d'une relation plusieurs à plusieurs
    Par Chauve souris dans le forum Langage SQL
    Réponses: 5
    Dernier message: 03/05/2013, 21h32
  2. Réponses: 1
    Dernier message: 30/04/2010, 18h56
  3. Affichage d'une requête dans le cas d'un paramètre vide
    Par Salamander24 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 01/02/2008, 08h57
  4. DRY dans le cas d'une relation 1-N
    Par titoumimi dans le forum Ruby on Rails
    Réponses: 15
    Dernier message: 02/05/2007, 05h48
  5. [cast] dans le cas d'une Std::list
    Par ZaaN dans le forum SL & STL
    Réponses: 9
    Dernier message: 26/10/2006, 10h07

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