JOINTURE ORACLE SQL

Fermé
Aura_ Messages postés 2 Date d'inscription dimanche 2 février 2020 Statut Membre Dernière intervention 3 février 2020 - 2 févr. 2020 à 11:51
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 3 févr. 2020 à 10:00
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

yg_be Messages postés 22729 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
Modifié le 2 févr. 2020 à 12:09
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 dimanche 2 février 2020 Statut Membre Dernière intervention 3 février 2020
3 févr. 2020 à 09:12
Bonjour,

merci pour votre retour, pour le moment, je n'ai rien a part un left join..
Cordialement
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
3 févr. 2020 à 10:00
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