Pergunta

Estou tentando fazer algo que já fiz um milhão de vezes e não está funcionando, alguém pode me dizer por quê?

Eu tenho uma tabela para pessoas que enviaram currículos e contém seus endereços de e-mail ...

Quero saber se alguma dessas pessoas NÃO se inscreveu no site.A tabela aspnet_Membership contém todas as pessoas que ESTÃO inscritas no site.

Existem 9.472 candidatos a emprego, com endereços de e-mail exclusivos.

Esta consulta produz 1793 resultados:

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

Isso sugere que deveria haver 7.679 (9472-1793) e-mails de pessoas que não estão cadastradas no site.Já que 1793 deles corresponderam, eu esperaria que o resto NÃO correspondesse...mas quando faço a consulta para isso, não recebo nada!

Por que essa consulta não está me dando nada???

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

Não sei como isso pode não estar funcionando - basicamente diz "mostre-me todos os e-mails que estão NA tabela de candidatos a emprego, mas NÃO NA tabela aspnet_Membership...

Foi útil?

Solução

Tivemos um problema muito semelhante recentemente, em que a subconsulta às vezes retornava valores nulos.Então, a instrução in trata null de uma maneira estranha, acho que sempre corresponde ao valor, então se você alterar sua consulta para:

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

pode funcionar....

Outras dicas

Você pode ter muitas duplicatas por aí.Não estou vendo o erro de consulta na minha cabeça, mas você pode tentar escrevê-lo desta forma:

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

Você também pode colocar um GROUP BY ou DISTINCT lá para se livrar das duplicatas.

Você poderia usar exists em vez de in assim:

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

Você deve obter melhor desempenho e evitar o comportamento 'estranho' (que suspeito ter a ver com valores/resultados nulos) ao usar in.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top