PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 23/07/2020 12:39:42

databaser
Membre

Requête au résultat partiellement correct

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! smile

Dernière modification par databaser (23/07/2020 12:41:58)

Hors ligne

#2 23/07/2020 13:32:37

gleu
Administrateur

Re : Requête au résultat partiellement correct

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

#3 23/07/2020 13:45:41

databaser
Membre

Re : Requête au résultat partiellement correct

Merci Gleu smile 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 smile

Hors ligne

#4 23/07/2020 16:38:33

gleu
Administrateur

Re : Requête au résultat partiellement correct

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

Pied de page des forums