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

Langage SQL Discussion :

Récupérer données dans plusieurs tables et répondant plusieurs conditions


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Récupérer données dans plusieurs tables et répondant plusieurs conditions
    Salut tout le monde,

    Je vous expose rapidement ma problématique.

    J'opère sur Oracle.

    Je possède quatre tables que nous appelerons TA, TB et TC.

    - TA (Ca1, Ca2, Ca3...)
    - TB (Cb1,Cb2,Cb3...)
    - TC (Cc1,Cc2,Cc3...)

    Je désire récupérer tous les champs Ca1, Ca2, Ca3 et seulement les champs Cc2 qui répondenet à la condition Cc3 (condition A ou condition B). Auquel cas il prendrait un nom différent. Cc2=Nom1 si (Cc3 = conditionA) / Cc2=Nom2 si (Cc3 = conditionB).

    Sachant aussi que des jointures existent entre TA et TB, de même qu'entre TA et TC.

    J'ai essayé de résumer ça en français car étant mpoins à l'aise pour l'expliquer en sql.

    Merci d'avance pour vos réponses et suggestions

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    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 103
    Points : 28 394
    Points
    28 394
    Par défaut
    Quelque chose comme ça :
    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
    SELECT  ta.ca1
        ,   ta.ca2
        ,   ta.ca3
        ,   t1.cc2  AS nom1
        ,   t2.cc2  AS nom2
    FROM    ta
        LEFT JOIN
            tc  AS t1
            ON  ta.lien = t1.lien
            AND t1.cc3  = conditionA
        LEFT JOIN
            tc  AS t2
            ON  ta.lien = t2.lien
            AND t2.cc3  = conditionB
    ;

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup,

    Voici carrément le code impémenté, il me sort missing expression.
    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
    select 
    req.request_id DFS_LINK, 
    reqP.status_name STATUS, 
    req.request_id DFS_, 
    req.description ID, 
    reqD.visible_parameter2 PACK, 
    reqH.visible_parameter3 INIT_FORECAST_DELIV, 
    reqH.visible_parameter4 CUR_FORECAST_DELIV, 
    reqH.visible_parameter1 CONTENT_EDITOR, 
    reqH.visible_parameter9 CONTENT_RECEIVER, 
    reqD.visible_parameter4 STREAM, 
    req.last_update_date LAST_UPDATED, 
    reqH.visible_parameter33 MEETING_DATE, 
    reqH.visible_parameter21 DELIVERY_DATE, 
    reqH.visible_parameter22 APPROVAL_DATE, 
    reqH.visible_parameter26 INIT_FOREC_DELIV_D, 
    ST1.creation_date AS DELI_TRANSAC_DATE, 
    ST1.last_update_date AS DELI_LAST_UPDATE_TRANSAC,
    ST2.creation_date AS APPR_TRANSAC_DATE, 
    ST2.last_update_date AS APPR_LAST_UPDATE_TRANSAC,
    ST1.visible_result_value STEP_RESULT_VALUE, 
    ST2.visible_result_value STEP_RESULT_VALUE, 
    
    from kcrt_requests req, kcrt_req_header_details reqH, kcrt_request_details reqD, kwfl_workflows w, 
    kcrt_portlet_request_list_v reqP
    
    Left join 
    kwfl_step_transactions ST1 
    on req.workflow_id = w.workflow_id 
    and w.workflow_id = ST1.workflow_id
    and ST1.status = 'COMPLETE'
    and ST1.visible_result_value  = 'Deliver document'
    
    Left join 
    kwfl_step_transactions ST2
    on req.workflow_id = w.workflow_id 
    and w.workflow_id = ST2.workflow_id
    and ST2.status = 'COMPLETE'
    and ST2.visible_result_value IN ('Approve document','Approve updated document')
    where
    req.request_id = reqH.request_idand req.request_id = reqP.request_idand req.request_id = reqD.request_id
    and reqP.request_type_name='NC - DFS'

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    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 103
    Points : 28 394
    Points
    28 394
    Par défaut
    Tant qu'à faire, utilise des jointures normalisées aussi pour les INNER JOIN !

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2007
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Est ce code te parait-il synthaxiquement correct.

    Car il me sort une erreur "ORA-00936: missing expression".

    Merci
    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
    SELECT 
    req.description ID, 
    reqD.visible_parameter2 PACK, 
    reqH.visible_parameter3 INIT_FORECAST_DELIV, 
    ST1.creation_date AS DELI_TRANSAC_DATE, 
    ST1.last_update_date AS DELI_LAST_UPDATE_TRANSAC,
    ST2.creation_date AS APPR_TRANSAC_DATE, 
    ST2.last_update_date AS APPR_LAST_UPDATE_TRANSAC,
    
    FROM 
    kcrt_requests req, kwfl_workflows wf
    
    INNER JOIN kcrt_req_header_details reqH ON (req.request_id = reqH.request_id)
    INNER JOIN kcrt_request_details reqD ON (req.request_id = reqD.request_id)
    INNER JOIN kcrt_portlet_request_list_v reqP ON (req.request_id = reqP.request_id)
    INNER JOIN kwfl_workflows wf ON (req.workflow_id=wf.workflow_id)
    
    
    LEFT JOIN 
    kwfl_step_transactions ST1 
    ON wf.workflow_id = ST1.workflow_id
    AND ST1.status = 'COMPLETE'
    AND ST1.visible_result_value  = 'Deliver document'
    
    LEFT JOIN 
    kwfl_step_transactions ST2
    ON wf.workflow_id = ST2.workflow_id
    AND ST2.status = 'COMPLETE'
    AND ST2.visible_result_value IN ('Approve document','Approve updated document')
    
    WHERE reqP.request_type_name ='NC - DFS'

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    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 103
    Points : 28 394
    Points
    28 394
    Par défaut
    Vérifie :
    • la liste des expressions de la clause SELECT
    • la liste des tables de la clause FROM

Discussions similaires

  1. Réponses: 8
    Dernier message: 25/11/2010, 08h03
  2. Réponses: 1
    Dernier message: 02/05/2010, 10h26
  3. requêtes ajout plusieurs données dans une table
    Par COLOMBAT dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/04/2008, 17h27
  4. Réponses: 7
    Dernier message: 17/03/2007, 13h52
  5. Réponses: 3
    Dernier message: 07/06/2006, 12h05

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