none
Ajuda com SELECT RRS feed

  • Pergunta

  • Galera, bom dia.

    Estou enfrentando um problema durante um select de informações em 7 tabelas distintas.

    Meu cenário é o seguinte, estou utilizando uma base que é um colégio, e preciso buscar informações referentes ao histórico de cada aluno durante os anos (2012, 2013, 2014, 2015, 2016). No entando meu select parece estar duplicando os campos e me trazendo um número gigantesco de registros mesmo eu utilizando a clausula DISTINCT. Cada aluno deve ter mais ou menos 100 registros por ano, com o select que fiz, um único aluno me trouxe 300.000 linhas.

    Caso algum de vocês consiga me ajudar a aperfeiçoar esse select eu ficaria muito grato. Segue abaixo:

    USE (minha base)

    select DISTINCT TC.idcurso, TC.nomecurso,
           TS.idserie, TS.nomeserie,
           TP.siglaperiodo, 
           TT.idturma, 
           TA.idaluno, TA.nomealuno, TA.matricula,
           TEE.idestabelecimentoensino, TEE.nomeestabelecimento, TEE.cidade, TEE.Estado,
           TH.resultadofinal, TH.diasletivos, TH.observacao,
           TD.iddisciplina, TD.nomedisciplina, TD.CodigoAgrupamento, TD.TipoDisciplina,
           TFA.nota01,
           TD.ES_CargaHoraria, TD.NumeroOrdemHistorico
    from TbCurso AS TC
    INNER JOIN TbSerie AS TS
    ON TS.IdCurso = TC.IdCurso
    INNER JOIN TbPeriodo AS TP
    ON TP.IdUnidade = TC.IdUnidade
    INNER JOIN TbTurma AS TT
    ON TP.IdPeriodo = TT.IdPeriodo
    INNER JOIN TbAluno AS TA
    ON TA.IdUnidade = TP.IdUnidade
    INNER JOIN  TbHistorico AS TH
    ON TH.IdAluno = TA.IdAluno
    INNER JOIN TbEstabelecimentoEnsino AS TEE
    ON TEE.IdEstabelecimentoEnsino = TH.IdEstabelecimentoEnsino
    INNER JOIN TbFaseNotaAluno AS TFA
    ON TFA.IdAluno = TA.IdAluno
    INNER JOIN TbDisciplina AS TD
    ON TD.IdDisciplina = TFA.IdDisciplina
    where TP.siglaperiodo = '2016'

    order by TA.idaluno

    Desde já agradeço a atenção de todos.

    sexta-feira, 8 de setembro de 2017 13:38

Respostas

Todas as Respostas

  • Deleted
    sexta-feira, 8 de setembro de 2017 13:51
  • Boa tarde Jose,

    Então, as relações das tables eu tirei através do Design da base, esse banco na verdade não é meu, estou apenas prestando serviço de coletar informações. Respondendo suas perguntas:

    O valor da coluna idAluno é sempre o mesmo, durante todos os anos em que o aluno estudou no colégio? Sim, o aluno X sempre terá o mesmo ID.
    O código de matrícula dele é sempre o mesmo, durante todos os anos em que o aluno estudou no colégio? Sim, o aluno  X sempre terá o mesmo nº de matricula.
    Qual a a diferença entre série e período? Série é o registro do curso que o aluno está (ex: 1 série, maternal, jardim) já o período é o ano em que o aluno está cursando a série ( ex: 2017 - aluno X - cursando 3º do Colegial)
    O aluno faz parte de uma turma? Sim, a turma é a sala em que o aluno estava durante o período e a série X.

    Sem o distinct os registros praticamente triplicaram, de 300.000 foi pra 790.000 registros. Percebi tambem que todos os campos ficam identicos, e somente o campo NOTA é alterado, segue abaixo:

    idcurso nomecurso idserie nomeserie siglaperiodo idturma idaluno nomealuno matricula idestabelecimentoensino nomeestabelecimento cidade Estado resultadofinal diasletivos observacao iddisciplina nomedisciplina CodigoAgrupamento TipoDisciplina nota01 ES_CargaHoraria NumeroOrdemHistorico
    4 Ensino Médio 3 1ª Série 2016 858 2 BARBARA CRISTINE RODRIGUES DE AGUIAR 2659 58 Instituto Santa Maria Mazzarello Recife PE A 200 NULL 1 Língua Portuguesa NULL 1 7.5 NULL NULL
    4 Ensino Médio 3 1ª Série 2016 858 2 BARBARA CRISTINE RODRIGUES DE AGUIAR 2659 58 Instituto Santa Maria Mazzarello Recife PE A 200 NULL 1 Língua Portuguesa NULL 1 8 NULL NULL
    4 Ensino Médio 3 1ª Série 2016 858 2 BARBARA CRISTINE RODRIGUES DE AGUIAR 2659 58 Instituto Santa Maria Mazzarello Recife PE A 200 NULL 1 Língua Portuguesa NULL 1 8.5 NULL NULL
    4 Ensino Médio 3 1ª Série 2016 858 2 BARBARA CRISTINE RODRIGUES DE AGUIAR 2659 58 Instituto Santa Maria Mazzarello Recife PE A 200 NULL 1 Língua Portuguesa NULL 1 9 NULL NULL
    4 Ensino Médio 3 1ª Série 2016 858 2 BARBARA CRISTINE RODRIGUES DE AGUIAR 2659 58 Instituto Santa Maria Mazzarello Recife PE A 200 NULL 1 Língua Portuguesa NULL 1 9.5 NULL NULL


    sexta-feira, 8 de setembro de 2017 16:02
  • Deleted
    sexta-feira, 8 de setembro de 2017 16:57
  • Jose, fiz o relacionamente entre as PK e FK das tabelas. Porem o arquivo ficou muito grande, teria como me adicionar no Skype, ou me passar seu e-mail? Se possivel segue abaixo meus contatos:

    skype: Lucas - Innovent Solutions

    e-mail: lucas.pinheiro@innoventsolutions.com.br

    Desde já agradeço a atenção cara.

    At.


    • Editado lu_pinheiro segunda-feira, 11 de setembro de 2017 14:12
    segunda-feira, 11 de setembro de 2017 12:03
  • lu, dependendo da quantidade de registro que tenha na histórico por aluno, pode justificar esses vários registros. Essas tabelas que guardam históricos provocam esses tipos de resultados. Já tentou tirá-la e ver como fica?

    Dependendo do objetivo da tabela e da consulta. Pode ser que apenas o último registro, por ano, seja relevante.

    segunda-feira, 11 de setembro de 2017 17:11
  • Então, na tabela histórico existem 21.600 registros, já na tabela aluno 5.620, peguei a relação das chaves primarias e estrangeiras nas tabelas onde estou realizando a junção, uma duvida, eu preciso realizar o INNER JOIN mais de uma vez quando existir mais de 1 FK nas tabelas?

    Por exemplo, 

    from TbCurso AS TC
    INNER JOIN TbSerie AS TS
    ON TS.IdCurso = TC.IdCurso

    se houver mais campos iguais nas 2 tabelas, eu preciso aponta-los?


    • Editado lu_pinheiro segunda-feira, 11 de setembro de 2017 18:23
    segunda-feira, 11 de setembro de 2017 18:20
  • Deleted
    terça-feira, 12 de setembro de 2017 00:09
  • Lu_Pinheiro,

    Mas se você for tomar como base a quantidade de chaves estrangeiras para relacionar, provavelmente o retorno das linhas não será o desejado.

    Não seria o caso de realmente analisar os relacionamentos que estão sendo impostos neste momento?


    Pedro Antonio Galvao Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 14 de setembro de 2017 19:00
    Moderador