JOINTURE ORACLE SQL

Signaler
Messages postés
2
Date d'inscription
dimanche 2 février 2020
Statut
Membre
Dernière intervention
3 février 2020
-
Reivax962
Messages postés
3568
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2020
-
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

Messages postés
9607
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 février 2020
525
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.
Messages postés
2
Date d'inscription
dimanche 2 février 2020
Statut
Membre
Dernière intervention
3 février 2020

Bonjour,

merci pour votre retour, pour le moment, je n'ai rien a part un left join..
Cordialement
Messages postés
3568
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2020
931
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