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

Informix Discussion :

Difficulté dans les jointures externes


Sujet :

Informix

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 13
    Points : 12
    Points
    12
    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 : 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
    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
    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 790
    Points
    30 790
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    Un grand merci à toi. Tout est ok maintenant.

Discussions similaires

  1. Gestion des NULL dans les tables externes
    Par plouf2244 dans le forum Firebird
    Réponses: 1
    Dernier message: 23/03/2006, 16h55
  2. [Index] Utilisation dans les jointures..
    Par argv666 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 07/03/2006, 14h07
  3. Ordre d'exécution dans une jointure externe
    Par Pero dans le forum Langage SQL
    Réponses: 17
    Dernier message: 20/09/2005, 12h22
  4. Réponses: 17
    Dernier message: 18/03/2005, 09h23
  5. Choix dans les jointures externes
    Par WebPac dans le forum SQL
    Réponses: 2
    Dernier message: 21/01/2005, 12h34

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