Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Voici ma démarche :
Les données : dans TABLE1, 3 individus ont la même adresse.
Dans Table 2, l'adresse apparaît 4 fois dont 1 ligne est due à la variable pour les BIS et à une VARIABLE3, 1 ligne due à la variable BIS et une VARIABLE4, 1 ligne à une VARIABLE5.
Je veux récupérer les lignes de TABLE2 qui correspondent à l'ADRESSE de TABLE1 :
SELECT e.*, to_char(b.NUMERO '9999'), b.*
FROM MABASE.TABLE1 e LEFT OUTER JOIN MABASE.TABLE2 b ON ADRESSE = (b.NUMERO || ' ' || b.NOMVOIE) AND (e.TABLE1CP = trim(to_char(b.TABLE2CP, '99999')))
WHERE e.ADRESSE LIKE '%NOMEXEMPLE%';
Le résultat : 9 lignes : 4 lignes de TABLE2 pour 1 individu de TABLE1, 4 lignes pour le 2nd individu == résultat correct mais : 1 seule ligne pour le 3ème individu et les colonnes de TABL2 sont vides!! Pourquoi ?!
Les variables de la jointure du code ci-dessus sont identiques pour les 3 individus de TABLE1, j'ai bien vérifié.
Si vous avez des pistes, merci!
Dernière modification par databaser (23/07/2020 12:41:58)
Hors ligne
Vous faites un LEFT JOIN, donc vous obtiendrez toutes les lignes de table1 qu'il y ait correspondance avec table2 ou pas. Quand il n'y a pas correspondance avec table2, les colonnes de résultat pour table2 ont la valeur NULL. A priori, vous voulez plutôt faire un JOIN qu'un LEFT JOIN.
Guillaume.
Hors ligne
Merci Gleu J'ai bien compris le principe du LEFT JOIN et je veux justement obtenir toutes les lignes de TABLE1 et uniquement les correspondances de TABLE2.
Par contre, l'individu 3 devrait avoir les 4 mêmes correspondances que les ont l'individu 1 et 2 dans le résultat car les ADRESSES sont identiques (pas d'espace en plus, etc. J'ai bien vérifié). Pourquoi ?
Est-ce qu'en regardant le plan de requête ou les autres processus mis en oeuvre lors du traitement d'une requête, je pourrai avoir des éléments d'explications ? Je ne sais pas comment on a accès au plan de requête et les autres processus, j'essaie de comprendre comment faire.
Pourquoi un JOIN ?
Merci
Hors ligne
Difficile de vous répondre sans avoir accès à un jeu de données, au résultat observé et à celui attendu.
Pour avoir un plan d'exécution, il vous suffit d'ajouter l'instruction EXPLAIN avant la requête. Ceci dit, ça ne vous servira à rien ici.
Guillaume.
Hors ligne
Pages : 1