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 :

Select dans nombreuses tables liées pour les nuls !


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Select dans nombreuses tables liées pour les nuls !
    Bonjour,
    La situation en 2 mots : je suis utilisatrice d'une DB. Or le créateur - gestionnaire de la DB n'a pas prévu dans ses formulaires - vues la requête adaptée à mes besoins. En attendant adaptation, je tire moi-même mes résultats de la DB via Toad.

    Il s'agit de simples requêtes SELECT mais je dois poser des conditions "complexes" qui me dépassent déjà.

    Il s'agit d'une DB avec des résultats de tests médicaux.

    Table principale : dossier d (liée à de nombreuses autres tables)
    Champs
    - d.demandeur : type de demandeur : avec réponses possibles : médecin, entreprise, autre
    - d.medecin_ID : ID du médecin si le demandeur est un médecin
    - d.entreprise_ID : ID de l'entreprise si le demandeur est une entreprise
    - d.autre_ID : ID du demandeur ni médecin, ni entreprise
    - d.IDa : ID de l'échantillon si c'est un organe (est null si d.IDb ne l'est pas)
    - d.IDb : ID de l'échantillon si ce n'est pas un organe (est null si d.IDa ne l'est pas)

    Ces champs sont liés par des ID uniques à des tables descriptives :

    Table medecin_adresse ma : adresses des demandeurs médecin
    Table entreprise_adresse ea : adresses des demandeurs entreprises
    Table autre_adresse aa : adresses des demandeurs autres
    Table identification_A ia : description de l'échantillon organe
    Table identification_B ib : description de l'échantillon non organe

    Je veux une vue avec :
    - d.DossierID
    - nom du demandeur : (ma.nom_medecin ou ea.nom_entreprise ou aa.nom_autre) selon la valeur du champ d.demandeur
    - nom échantillon : (ia_ech ou ib_ech) selon que ce soit un échantillon organe ou non

    Comment faire ? En fait mes conditions WHERE dépendent des valeurs des champs d.demandeur, d.IDa et d.IDb...Je devrais faire l'équivalent de IF d.demandeur = '...' THEN (SELECT FROM WHERE) et UNION de ces requêtes.

    Merci d'avance pour vos suggestions explications !

    Mes excuses si je ne suis pas dans le bon forum et si ma question est incompréhensible. Je ne suis pas assez compétente même pour poser une bonne question dans ce domaine ;-) !
    Bonne fin de journée
    Cécile
    Oracle10q

  2. #2
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Une piste, pour commencer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT d.DossierID ,
               DECODE (d.demandeur,
                   'medecin', (SELECT nom_medecin
                                 FROM medecin_adresse ma
                                WHERE ma.medecin_id = d.medecin_id),
                   'enterprise', (SELECT nom_entreprise
                                    FROM entreprise_adresse ea
                                   WHERE ea.entreprise_id = d.entreprise_id),
                   (SELECT nom_autre
                      FROM autre_adresse aa
                     WHERE aa.autre_id = d.autre_id)
                  ) "nom"
      FROM dossier d
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  3. #3
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Pour les noms des organes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT (SELECT ia_ech 
    FROM identification_A ia
    WHERE d.IDa IS NOT NULL
    AND ia.IDa = d.IDa
    UNION
    SELECT ib_ech 
    FROM identification_B ib
    WHERE d.IDb IS NOT NULL
    AND ib.IDb = d.IDb
    ) AS nom_organe 
    FROM dossier d
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  4. #4
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Mcm,

    on peut faire pareil pour le nom des organes (sans union et avec un decode)
    ce qui donne
    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
     
    SELECT d.dossierid,
           DECODE (d.demandeur,
                   'medecin', (SELECT nom_medecin
                                 FROM medecin_adresse ma
                                WHERE ma.medecin_id = d.medecin_id),
                   'enterprise', (SELECT nom_entreprise
                                    FROM entreprise_adresse ea
                                   WHERE ea.entreprise_id = d.entreprise_id),
                   (SELECT nom_autre
                      FROM autre_adresse aa
                     WHERE aa.autre_id = d.autre_id)
                  ) "nom demandeur",
           DECODE (d.idb,
                   NULL, (SELECT ia_ech
                            FROM identification_a ia
                           WHERE ia.ida = d.ida),
                   (SELECT ib_ech
                      FROM identification_b ib
                     WHERE ib.idb = d.idb)
                  ) "nom echantillon"
      FROM dossier d
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci,

    Je connaissais les DECODE mais je ne savais pas qu'on pouvait imbriquer des SELECT dedans " à volonté". Je vais essayer ça demain...
    D'ores et déjà un grand merci à vous !
    Cécile

Discussions similaires

  1. [MySQL] Selection dans plusieurs tables pour constituer un seul RecordSet
    Par mesken dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 15/10/2011, 21h25
  2. Réponses: 0
    Dernier message: 25/01/2010, 14h16
  3. Réponses: 7
    Dernier message: 24/04/2008, 11h53
  4. Selection d'enreg dans 5 tables liées
    Par CharleLéo dans le forum Access
    Réponses: 6
    Dernier message: 21/12/2006, 14h36

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