Olá Mozart,
estava tentando reescrever uma consulta agora a pouco, tentando aplicar
essas sugestões.

Porém, se eu executasse desse jeito que está no exemplo, ele não reclamaria
que está faltando entrada para a tabela ps e pf no segundo select? E se eu
colocasse os inners para essas tabelas não precisaria fazer o UNION ALL...
fiquei confusa.

-- 
Atenciosamente,
Priscila Cardoso Gonçalves
http://meadiciona.com.br/prinity
Linux User: #415920

Considere a proteção ao meio ambiente antes de imprimir esse e-mail.


Em 20 de maio de 2010 12:39, Mozart Hasse <mozart.ha...@usa.net> escreveu:

> Oi Marcel,
>
> > Não ficou muito claro para mim a reescrita de uma consulta.
> > Como eu faria numa consulta como esta abaixo???
>
> *Assumindo* que turmas_ofertas_professores tem o campo turma_oferta_id não
> nulo
> *e* que *todo* o professor tem uma referência à tabela pessoas, ficaria:
>
> SELECT tof.id AS turma_oferta_id, tpo.id AS turma_professor_id, pf.id AS
> professor_id, pf.cod_prof, ps.id, ps.nome_pessoa, sum(tpo.carga_horaria)
> AS
> carga_horaria, sum(tpo.carga_horaria) * 0.2::double precision AS
> horas_preparacao, d.id AS disciplina_id, d.cod_disciplina,
> d.nome_disciplina, tof.nr_vagas, tof.cod_turma, tof.periodo_id
> FROM turmas_ofertas tof
> INNER JOIN disciplinas d ON tof.disciplina_id = d.id
> INNER JOIN turmas_ofertas_professores tpo ON tpo.turma_oferta_id = tof.id
> INNER JOIN professores pf ON tpo.professor_id = pf.id
> INNER JOIN pessoas ps ON pf.pessoa_id = ps.id
> GROUP BY tpo.id, tpo.carga_horaria, tof.id, tof.cod_turma, tof.nr_vagas,
> tof.periodo_id, d.id, d.cod_disciplina, d.nome_disciplina, pf.id,
> pf.cod_prof, ps.id, ps.nome_pessoa;*
>
> UNION ALL
>
> SELECT tof.id AS turma_oferta_id, tpo.id AS turma_professor_id, pf.id AS
> professor_id, pf.cod_prof, ps.id, ps.nome_pessoa, sum(tpo.carga_horaria)
> AS
> carga_horaria, sum(tpo.carga_horaria) * 0.2::double precision AS
> horas_preparacao, d.id AS disciplina_id, d.cod_disciplina,
> d.nome_disciplina, tof.nr_vagas, tof.cod_turma, tof.periodo_id
> FROM turmas_ofertas tof
> INNER JOIN disciplinas d ON tof.disciplina_id = d.id
> WHERE NOT EXISTS( SELECT 1 FROM turmas_ofertas_professores tpo WHERE
> tpo.turma_oferta_id = tof.id)
>
> É de se esperar um ganho bem significativo com essa otimização.
>
> Caso as premissas acima não sejam válidas, verifique se sua modelagem
> realmente precisa ser assim e se prepare para ter até 7 UNION ALL seguindo
> um
> critério similar ao exposto acima.
>
> Mozart Hasse
>
>
> _______________________________________________
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a