JOINTURE ORACLE SQL

Bonjour,

j'ai deux tables A et B, toutes deux avec 4 champs : numero_de_commande, date_debut_commande, date_fin_commande, commentaire.

Ma clé est : numero_de_commande, date_debut_commande, date_fin_commande

Je souhaite récupérer l'ensemble de mes données de la table A, et lorsque ma clé (numero_de_commande, date_debut_commande, date_fin_commande) n'est pas présente dans la table B, je souhaite que mon champs commentaire ajoute par concaténation 'NOT_IN_B'

Mon format final ressemblerait donc a :
121323142 12/08/2018 23/05/2019 COMMANDE SODEXO
120930210 12/06/2019 24/07/2019 COMMANDE ATELIER_NOT_IN_B

Pouvez vous m'aidez ?
J'arrive a voir soit les points communs, soit les différences, mais pas récupérer l'ensemble de A en ajoutant l'information quand la ligne n'est pas dans B...

Merci :)

3 réponses

  1. Contributeur
    bonjour,
    peux-tu nous montrer les syntaxes que tu as utilisées et les résultat obtenus?
    je suggère, pour commencer, de faire une jointure à gauche affichant tous les champs des deux tables.
    quand cela fonctionnera, il suffira de modifier légèrement cette requête.
    0
    1. Bonjour,

      merci pour votre retour, pour le moment, je n'ai rien a part un left join..
      Cordialement
      0
      1. Bonjour,

        Le LEFT JOIN me semble être la bonne approche.
        Essaie quelque chose comme ça :
        SELECT a.*, a.commentaire || 
               CASE WHEN b.numero_de_commande IS NULL THEN 'NOT_IN_B' ELSE '' END as commentaire_modifie
        FROM a
        LEFT OUTER JOIN b ON a.numero_de_commande = b.numero_de_commande  AND a.date_debut_commande = b.date_debut_commande AND a.date_fin_commande = b.date_fin_commande

        Sinon, plutôt que de concaténer en fin de commentaire, tu peux rajouter juste une valeur booléenne (type bit) en mettant
        CASE WHEN b.numero_de_commande IS NULL THEN 1 ELSE 0 END as not_in_b
        , ce sera plus simple à lire programmatiquement..

        Xavier
        0