Question

J'essaie de faire quelque chose que j'ai fait un million de fois et ça ne marche pas, quelqu'un peut-il me dire pourquoi ?

J'ai un tableau pour les personnes qui ont envoyé des CV, et il contient leur adresse e-mail...

Je veux savoir si l'une de ces personnes ne s'est PAS inscrite sur le site Web.La table aspnet_Membership contient toutes les personnes SONT inscrites sur le site Web.

Il y a 9472 demandeurs d'emploi, avec des adresses e-mail uniques.

Cette requête produit 1 793 résultats :

select j.email from jobseeker j
join aspnet_Membership m on j.email = m.email

Cela suggère qu'il devrait y avoir 7 679 (9 472-1 793) e-mails de personnes qui ne sont pas inscrites sur le site Web.Puisque 1793 d'entre eux correspondent, je m'attendrais à ce que le reste ne corresponde PAS...mais quand je fais la requête pour ça, je n'obtiens rien !

Pourquoi cette requête ne me donne rien ???

select j.email 
from jobseeker j
where j.email not in (select email from aspnet_Membership)

Je ne sais pas comment cela pourrait ne pas fonctionner - cela dit essentiellement "montrez-moi tous les e-mails qui se trouvent DANS la table des demandeurs d'emploi, mais PAS DANS la table aspnet_Membership...

Était-ce utile?

La solution

Nous avons récemment eu un problème très similaire où la sous-requête renvoyait parfois des valeurs nulles.Ensuite, l'instruction in traite null d'une manière étrange, je pense qu'elle correspond toujours à la valeur, donc si vous modifiez votre requête en :

select j.email 
from jobseeker j
where j.email not in (select email from aspnet_Membership
                      where email is not null)

ça peut marcher....

Autres conseils

Vous pourriez avoir beaucoup de doublons.Je ne vois pas l'erreur de requête par tête, mais vous pouvez essayer de l'écrire de cette façon :

SELECT j.email
FROM jobseeker j
LEFT JOIN aspnet_Membership m ON m.email = j.email
WHERE m.email IS NULL

Vous pouvez également y ajouter un GROUP BY ou DISTINCT pour vous débarrasser des doublons.

Vous pourriez utiliser exists au lieu de in comme ça:

Select J.Email
From Jobseeker j
Where not exists (Select * From aspnetMembership a where j.email = a.email)

Vous devriez obtenir de meilleures performances et éviter le comportement « bizarre » (qui, je suppose, est lié aux valeurs/résultats nuls) lors de l'utilisation in.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top