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 [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
