Bonjour à tous,
J'ai une requête très simple dont je ne comprends pas le résultat: j'ai 2 tables, la première "extrait" contient environ 5.000 lignes. La 2ème "total" contient environ 7 millions de lignes, dont 1.7 million non nulles. Les 2 sont liées par leur champs "ID", clé primaire dans extrait, champs classique chez total. Pour info, je sais que 10 extrait.id ne sont pas dans total.
Je veux juste voir parmi "extrait" les clés que je ne trouve pas dans total, j'ai donc tout simplement écrit:
Mais cela ne fonctionne pas!! ça ne me renvoie aucun résultat! Pour avoir le bon résultat, je dois rajouter une clause not null à la sous-requête:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 select e.* from extrait e where e.ID not in ( select t.ID from total t)
Je ne comprends pas du tout en quoi cette clause change quelque chose!! Quelqu'un a un explication?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 select e.* from extrait e where e.ID not in ( select t.ID from total t where t.ID is not null)
Pour info, les deux requêtes suivantes me donnent les bons résultats:
Merci à tous
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 select e.* from extrait e left outer join total t on t.ID = e.ID where t.ID is null -- >> je trouve les 10 résultats attendus select e.* from extrait e where not exists (select null from total t where t.ID = e.ID) -- >> je trouve les 10 résultats attendus
Partager