Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Isabela.santana

Montar consulta SQL

Recommended Posts

Olá!

Tendo a tabela clDependentes e clAfinidades, eu preciso retornar a Qtd de dependentes de um determinado funcionário cujo parentesco não seja igual a ('Cônjuge','Pai','Mãe'), mas quero todo os dependentes filhos cuja idade seja maior ou igual a 19 anos.

Elaborei a consulta abaixo, mas não tenho certeza se irá funcionar corretamente (vejam que no operador not in, eu coloco 'Filho(a)', e logo abaixo especifico que só quero retornar aqueles filhos cuja idade seja maior ou igual a 19 anos)

 

select count(clDep.ID) 
from clDependentes clDep 
  inner join clAfinidades clAfi on (clDep.id_afinidade = clAfi.id_afinidade) 
where clDep.id_visitante = 5
and clAfi.parentesco not in ('Cônjuge','Pai','Mãe','Filho(a)') or
(clAfi.parentesco = 'Filho(a)' and clDep.Idade >= 19 and clDep.id_visitante = 5)

 



Esta consulta deu certo, mas eu não sei exatamente o motivo dela ter funcionado, e isso me deixa com dúvidas.

Fiz a consulta dessa forma para ficar mais claro para quem for responder, mas é claro que eu poderia (e seria padrão) utilizar os IDs.

Estou postando esta dúvida para uma colega aqui do trabalho que não está conseguindo criar uma conta aqui no fórum imasters. Até eu tive dificuldades para criar o meu cadastro.

Isa

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual a sua dúvida ?

 

ficaria mais claro na minha opinião se
select count(clDep.ID) 
from clDependentes clDep 
  inner join clAfinidades clAfi on (clDep.id_afinidade = clAfi.id_afinidade) 
where clDep.id_visitante = 5 
and (clAfi.parentesco not in ('Cônjuge','Pai','Mãe','Filho(a)') 
     or 
     (clAfi.parentesco = 'Filho(a)' and 
      clDep.Idade >= 19 and 
      clDep.id_visitante = 5))

 

 




			
		

Compartilhar este post


Link para o post
Compartilhar em outros sites

Grata, Mota.

 

Sim, ficou melhor organizada da forma que vc a estruturou.

 

A dúvida reside no fato de eu ter colocado no operador not in o parentesco "Filho(a)", ou seja, ter especifidado que não queria os filhos, e depois digo que os quero, mas somente os filhos maiores de 19 anos.

Eu cheguei a esta consulta fazendo testes e não tenho certeza de que ela está correta. A lógica ficou confusa para mim. Entende?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por isto o OR Isabela e usando OR é sempre separar as condições entre parênteses.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mota,

 

Sim, tem razão. O OR é o que torna a consulta possível. O Analisador vai entender como sendo 2 consultas e executá-las de forma separadamente.

 

Agradecemos...

 

ps. já que vc é moderador, avisa o administrador do fórum que está complicado fazer o cadastro no fórum e que as mensagens enviadas para forum@imasters.com.br (que seria o administrador) retornam.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isabela.santana que cadastro falas exatamente?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.