Consulta SQL não retorna resultados excluidos Usando NOT IN ou NO Exists

13/10/2014

0

Olá tenho a tabela Tab_funcionários com a Coluna IdFuncionário com valores de 1 a 999. Como vários registro são delatados desta tabela e posteriormente eu os reaproveito criei uma tabela tempTab_funcionários com a Coluna IdFuncionário com uma sequencia de valores completo de 1 a 999 para fazer a comparação com a Primeira.
usando este select:

select * from tempTab_funcionários
where not exists (select * from Tab_funcionários
where tempTab_funcionários.Idfuncionário <> Tab_funcionários.IdFuncionário)

porem ele não retorna valores, sendo que a olho nu percebo que existem varios intervalos que se encaixam nesta solicitação, mas parece que ao serem excluidas as linhas ainda assim constam como valores inseridos?

Por que será? alguem me da uma força por favor?
Hamdem Voguel

Hamdem Voguel

Responder

Post mais votado

13/10/2014

Se voce precisa retornar o que está em uma tabela e não está na outra, use left join
select a.* from tempTab_funcionários as a
left join Tab_funcionários as b
on a.Idfuncionário = b.Idfuncionário 
where b.Idfuncionário  is null


isso ira retornar todos os registros da tabela tempTab_funcionários que não estão na Tab_funcionários

Fabiano Carvalho

Fabiano Carvalho
Responder

Mais Posts

13/10/2014

Claudio Lopes

voce está retornando muitas colunas quando usa o " * ".

A maneira que o fabiano te informou é a mais correta, porém tem dessa forma

select * from tempTab_funcionários
where idFuncionario not exists (select idFuncionario from Tab_funcionários
where tempTab_funcionários.Idfuncionário <> Tab_funcionários.IdFuncionário)


olhe que eu coloquei um campo (coluna) chamado de idFuncionario.
Responder

13/10/2014

Hamdem Voguel

Fabiano realmente não tinha pensado na possibilidade de usar o left join.. batata... retornou os itens da comparação.
Din o seu retornou o mesmo resultado apos alguns acertos...

select * from tempTab_funcionários r
where r.IdFuncionário not in (select v.IdFuncionário from Tab_funcionários v
where r.Idfuncionário = v.IdFuncionário)


Obrigado pela a ajuda de vocês foi de grande aproveitamento.
Responder

15/10/2014

Claudio Lopes

Quem bom que deu certo! Abraços
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar