Dúvida sobre Select no SQL Server

05/10/2014

Boa tarde galera, sou iniciante em programação e estou me deparando com um problema em um SELECT

é o seguinte....

Tenho uma tabela VACINA onde contem dados de todas vacinas existentes e
Tenho uma tabela APLICACAO onde contem dados de todas aplicações de vacinas realizadas.

Quero buscar todas vacinas cujo não existem na tabela APLICACAO quando APLICACAO.IDPACIENTE = 10. (Vacinas aplicadas no paciente de id = 10)
(ou seja, todas vacinas que determinado paciente ainda não recebeu)

Select que eu tentei fazer e não deu certo:

select *from Vacina where Vacina.idVacina !=
(select Vacina.idvacina from Vacina inner join Aplicacao
on Vacina.idVacina = Aplicacao.vacina
where Aplicacao.idPaciente !=10)

Mensagem de erro:
A subconsulta retornou mais de 1 valor. Isso não é permitido quando a subconsulta segue um =, !=, <, <= , >, >= ou quando ela é usada como uma expressão.

Agradeço qualquer tipo de ajuda..

Melhor resposta

05/10/2014

Apenas basta mudar o operador != por NOT IN. Ou seja, o operador != é binário, atua sobre dois operadores. Nesse caso você tem um valor e quer compará-lo com uma lista, então você precisa verificar se ele NÃO ESTÁ CONTIDO (not in).

Joel Rodrigues

Responder Citar

Outras Respostas

06/10/2014

Cléverson Specht

Bom dia Denis,

Tente essa consulta:

SELECT *
  FROM Vacina V (NOLOCK)
 WHERE V.idVacina NOT EXISTS (SELECT 1
                                FROM Aplicacao A (NOLOCK)                                   
                               WHERE V.idVacina = A.vacina
                                 AND Aplicacao.idPaciente = 10)
Responder Citar

06/10/2014

Denis

Obrigado galera!!

deu certo utilizando o not in, realmente ainda não conhecia esse comando.

Abraços
Responder Citar

07/10/2014

Joel Rodrigues

Que bom que deu certo, fico feliz por ter ajudado.
Um abraço e bons códigos.
Responder Citar