DÊVIDA NA ELABORA?ÃO DE CONSULTA SQL
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.
Grata,
Ana
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.
Grata,
Ana
Posso estar errado porque usar not in (pai, mae, conjuge, se pode usar apenas = filho
Select count(clDep.ID) from clDependentes clDep inner join clAfinidades clAfi on (clDep.id_afinidade = clAfi.id_afinidade) where (clAfi.parentesco = [ô]Filho(a)[ô] and clDep.Idade >= 19) and clDep.id_visitante = 5
ANINHAX,
Vou tentar analisar sua query para ver se te ajuda...
- SELECT
Traz somente o conta (total) de dependentes: [Ô]count(clDep.ID)[Ô]
- FROM
Você fez o INNER JOIN da tabelas [Ô]clDependentes[Ô] e [Ô]clAfinidades[Ô] juntando a Chave Estrangeira (clDep.id_afinidade) e a Chave Primária (clAfi.id_afinidade).
- WHERE
O ID de visitante sempre será [Ô]5[Ô]? (clDep.id_visitante = 5)
AND
O campo [Ô]clAfi.parentesco[Ô] tem o nome por extenso do grau de parentesco ... isto não considero bom, pois pode-se errar na digitação, o certo seria ter um número de
ID (chave primária) nesta posição. Exemplos: Ao invés de: (([ô]Cônjuge[ô],[ô]Pai[ô],[ô]Mãe[ô],[ô]Filho(a)[ô]), use assim: (2,5,6,8). Isola corretamente estes parentescos.
OR
No caso de ser [ô]Filho(a)[ô] (mais uma vez é preferÃvel usar o ID do [ô]filho[ô] do que o nome por extenso).
AND
clDep.Idade >= 19
AND
clDep.id_visitante = 5 (sempre o código 5 para ID visitante novamente ... não poder ser outro tipo de visitante?)
O [ô]filho[ô] é independente dos outros graus de parentesco como você quer. Dois trechos de [ô]where[ô] separados por [ô]OR[ô] (ou um ou outro).
é isto?
[][ô]s,
Tunusat.
Vou tentar analisar sua query para ver se te ajuda...
- SELECT
Traz somente o conta (total) de dependentes: [Ô]count(clDep.ID)[Ô]
- FROM
Você fez o INNER JOIN da tabelas [Ô]clDependentes[Ô] e [Ô]clAfinidades[Ô] juntando a Chave Estrangeira (clDep.id_afinidade) e a Chave Primária (clAfi.id_afinidade).
- WHERE
O ID de visitante sempre será [Ô]5[Ô]? (clDep.id_visitante = 5)
AND
O campo [Ô]clAfi.parentesco[Ô] tem o nome por extenso do grau de parentesco ... isto não considero bom, pois pode-se errar na digitação, o certo seria ter um número de
ID (chave primária) nesta posição. Exemplos: Ao invés de: (([ô]Cônjuge[ô],[ô]Pai[ô],[ô]Mãe[ô],[ô]Filho(a)[ô]), use assim: (2,5,6,8). Isola corretamente estes parentescos.
OR
No caso de ser [ô]Filho(a)[ô] (mais uma vez é preferÃvel usar o ID do [ô]filho[ô] do que o nome por extenso).
AND
clDep.Idade >= 19
AND
clDep.id_visitante = 5 (sempre o código 5 para ID visitante novamente ... não poder ser outro tipo de visitante?)
O [ô]filho[ô] é independente dos outros graus de parentesco como você quer. Dois trechos de [ô]where[ô] separados por [ô]OR[ô] (ou um ou outro).
é isto?
[][ô]s,
Tunusat.
Grata, MARCELO-TREZE
Porque da lista de Afinidades (e são várias) , eu preciso de todos(as), menos as que estão sendo explÃcitamente citadas. Ah, e também quero os Filhos(as) cuja idade esteja dentro do critéro especificado.
Ana
Porque da lista de Afinidades (e são várias) , eu preciso de todos(as), menos as que estão sendo explÃcitamente citadas. Ah, e também quero os Filhos(as) cuja idade esteja dentro do critéro especificado.
Ana
TUNUSAT, obrigada.
Eu postei dessa forma para ficar mais claro para quem for responder, e sim, o sistema utiliza os IDs.
Ah, o clDep.id_visitante = 5 também foi para ficar mais legÃvel, só isso!
Ana
Eu postei dessa forma para ficar mais claro para quem for responder, e sim, o sistema utiliza os IDs.
Ah, o clDep.id_visitante = 5 também foi para ficar mais legÃvel, só isso!
Ana
Naõ tenho certeza que de certo mas teste
Select count(clDep.ID) from clDependentes clDep inner join clAfinidades clAfi on (clDep.id_afinidade = clAfi.id_afinidade) where clAfi not in ([ô]Cônjuge[ô],[ô]Pai[ô],[ô]Mãe[ô]) and (clAfi.parentesco = [ô]Filho(a)[ô] and clDep.Idade >= 19) and clDep.id_visitante = 5
Grata, Marcelo
Dessa forma somente retorna 1 [Ô]uma[Ô] linha, ou seja, apenas executou o critério para filho maior de 19.
Dessa forma somente retorna 1 [Ô]uma[Ô] linha, ou seja, apenas executou o critério para filho maior de 19.
E o que teria de retornar?
Marcelo,
Teria que retornar as seguintes linhas:
-Sogro(a)
-Primo(a)
-Filho(a) (de 19 anos - esta retornou corretamente)
Teria que retornar as seguintes linhas:
-Sogro(a)
-Primo(a)
-Filho(a) (de 19 anos - esta retornou corretamente)
mais uma tentativa
Select count(clDep.ID), clAfi.* from clDependentes clDep inner join clAfinidades clAfi on (clDep.id_afinidade = clAfi.id_afinidade) where clAfi not in ([ô]Cônjuge[ô],[ô]Pai[ô],[ô]Mãe[ô]) and (clDep.Idade >= 19 and clDep.id_visitante = 5)
Marcelo,
Agora somente retornou Sogro(a) e Filho(a), mas faltou o primo de 13 anos.
Agradeço as tentativas...
Agora somente retornou Sogro(a) e Filho(a), mas faltou o primo de 13 anos.
Agradeço as tentativas...
Faça seu login para responder