Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité de passage
    Profil pro Jean-Marc LABATUT
    Inscrit en
    janvier 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Nom : Jean-Marc LABATUT

    Informations forums :
    Inscription : janvier 2010
    Messages : 13
    Points : 4
    Points
    4

    Par défaut Difficulté dans les jointures externes

    Bonjour à tous,

    Je rencontre un problème en voulant récuperer des informations dans 2 tables reliées par un même ID. Voici la source de ma requête :

    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
    SELECT
    phs.phs_d  AS Date_mouv,
    phs.phs_psk_bra_id AS Ets,
    phs.phs_pmf_id AS Code_Marque,
    phs.phs_pro_id AS Ref_art,
    phs.phs_movement  AS Mvt,
     
    CASE phs.phs_movement
      WHEN '01' THEN 'Réception'
      WHEN '02' THEN 'Vente'
      WHEN '03' THEN 'Remplacement'
      WHEN '04' THEN 'Ajustement'
      WHEN '05' THEN 'Inventaire'
      WHEN '06' THEN 'Surplus'
      WHEN '07' THEN 'Trf camion'
    END AS Design_mvt,
     phs.phs_odh_srh_doc AS Num_lot,
     phs.oft_id AS Type_or,
     phs.ofh_id AS Num_or,
     phs.phs_csc_id AS Num_client,
     phs.phs_csc_id AS Ets_cession,
     phs.phs_q AS Qte_mvt,
     phs.phs_cost AS Pu_mvt
     
    FROM phs LEFT JOIN pdi ON (phs_pro_id = pdi.pro_id)
     
    WHERE YEAR(phs.phs_d) IN('2009','2010')
    	AND pdi.lng_id = 1
    	AND phs.phs_psk_bra_id IN('OV01','OV02','OV03','BE01','BE02')
    	AND phs_pro_id = 'WA8307020874'
    ORDER BY phs.phs_d
    ---

    Je souhaite que chaque "lecture" de ma table pdi me retourne un seul résultat même si il existe plusieurs enregistrements pour un même index. Or dans le cas présent, je retrouve 8 enregistrements.

    Je pensais à une clause comme un "FIRST 1" mais ça ne marche pas dans un argument LEFT JOIN.

    Comment faire ?




    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro Alain
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    5 628
    Détails du profil
    Informations personnelles :
    Nom : Homme Alain
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 5 628
    Points : 13 730
    Points
    13 730

    Par défaut

    En plaçant la condition pdi.lng_id = 1 dans la clause WHERE de la requête, tu forces la jointure sur pdi à se comporter comme une jointure interne.
    Par ailleurs, tu n'utilises aucune donnée de pdi dans la requête autre que cette sélection.

    Une condition d'existence serait plus adaptée à ton besoin.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT  ...
    FROM    phs 
    WHERE   YEAR(phs.phs_d) IN (2009, 2010)
    	AND phs.phs_psk_bra_id IN ('OV01', 'OV02', 'OV03', 'BE01', 'BE02')
    	AND phs_pro_id = 'WA8307020874'
        AND EXISTS
            (   SELECT  1
                FROM    pdi
                WHERE   phs_pro_id = pdi.pro_id
                    AND pdi.lng_id = 1
            )
    ORDER BY phs.phs_d
    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.

  3. #3
    Invité de passage
    Profil pro Jean-Marc LABATUT
    Inscrit en
    janvier 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Nom : Jean-Marc LABATUT

    Informations forums :
    Inscription : janvier 2010
    Messages : 13
    Points : 4
    Points
    4

    Par défaut

    Un grand merci à toi. Tout est ok maintenant.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •