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 03/10/2024 14:25:05

dba-sig-sfepm
Membre

left join ou not in

Bonjour la communauté,
je voudrais savoir s'il y a une différence algorithmique majeure entre ces 2 requêtes :

select table1.* from table1 left join table2 using (id) where table2.id is null

et

select * from table1 where id not in (select id from table2)

Je demande ça car d'après moi le résultat de ces 2 requêtes devraient être identiques mais apparemment je me trompe. Je fais ce type de requête pour tester la présence d'uuid entre 2 tables et alors que la première me renvoie le résultat attendu, la deuxième renvoie 0 lignes. Quelque chose doit m'échapper ...

Hors ligne

#2 04/10/2024 03:52:09

rjuju
Administrateur

Re : left join ou not in

Bonjour,

La difference vient de la gestion des NULL avec une clause IN.  Votre table2 doitt contenir des enregistrements ou id est NULL.

Hors ligne

#3 08/10/2024 09:56:00

dba-sig-sfepm
Membre

Re : left join ou not in

Bonjour et merci pour la réponse.
Oui en effet mais ce n'était pas le cas chez moi. Je n'ai pas trop compris mais qu'importe, je n'ai pas beaucoup cherché plus loin puisqu'il y avait une solution. En tout cas les quelques tests que j'ai réalisés montrent qu'au niveau performance, sur de grosses table, il vaut mieux utiliser la jointure que le in avec une sous-requête.
Bonne journée.

Hors ligne

Pied de page des forums