Dúvida sobre Select no SQL Server
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..
é 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..
Denis
Curtidas 0
Melhor post
Joel Rodrigues
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).
GOSTEI 1
Mais Respostas
Cléverson Specht
05/10/2014
Bom dia Denis,
Tente essa consulta:
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)
GOSTEI 1
Denis
05/10/2014
Obrigado galera!!
deu certo utilizando o not in, realmente ainda não conhecia esse comando.
Abraços
deu certo utilizando o not in, realmente ainda não conhecia esse comando.
Abraços
GOSTEI 0
Joel Rodrigues
05/10/2014
Que bom que deu certo, fico feliz por ter ajudado.
Um abraço e bons códigos.
Um abraço e bons códigos.
GOSTEI 0