JOINTURE ORACLE SQL

Aura_ Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   -
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 :)
A voir également:

3 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
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
Aura_ Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,

merci pour votre retour, pour le moment, je n'ai rien a part un left join..
Cordialement
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
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