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?
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
Curtir tópico
+ 0
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
isso ira retornar todos os registros da tabela tempTab_funcionários que não estão na Tab_funcionários
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
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
olhe que eu coloquei um campo (coluna) chamado de idFuncionario.
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.
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
Clique aqui para fazer login e interagir na Comunidade :)