ajuda no SELECT

1. ajuda no SELECT

gilson santos
jrchuteboxe

(usa Ubuntu)

Enviado em 12/11/2008 - 16:55h

olá moçada, beleza?
to apanhando feio do meu select aqui, tenho o seguinte select

SELECT
ppi.tb_municipioreferencia.codmunicipio,
ppi.tb_municipioreferencia.anobase,
ppi.tb_municipioreferencia.codacao,
ppi.tb_municipioreferencia.codmunicipioreferencia,
ppi.tb_municipioreferencia.qtconsultasencaminhadas,
ppi.tb_acaomunicipio.qtconsultascalculadas,
ppi.tb_acaomunicipio.qtrealizadomunicipio,
ppi.tb_acaomunicipio.qtrealizadofora,
ppi.tb_acao.nomeacao,
ppi.tb_acaoprocedimento.codprocedimento,
ppi.tb_procedimento.valorprocedimento,
ppi.tb_procedimento.valormedio,
ppi.tb_procedimento.nomeprocedimento,
ppi.tb_municipiopopulacao.numpopulacao,
ppi.tb_municipio.indestadomunicipio,
ppi.tb_municipio.codmicroregional,
ppi.tb_municipio.nomemunicipio,
municipio_1.nomemunicipio AS nomemunicipioreferencia,
ppi.tb_microregional.nomemicroregional,
ppi.tb_microregional.codregional,
ppi.tb_regional.nomeregional,
ppi.tb_regional.codmacroregional,
ppi.tb_macroregional.nomemacroregional
FROM ppi.tb_acaomunicipio
INNER JOIN ppi.tb_municipioreferencia
ON ppi.tb_municipioreferencia.codmunicipio = ppi.tb_acaomunicipio.codmunicipio
AND ppi.tb_municipioreferencia.anobase = ppi.tb_acaomunicipio.anobase
AND ppi.tb_municipioreferencia.codacao = ppi.tb_acaomunicipio.codacao
INNER JOIN ppi.tb_acao ON ppi.tb_acao.codacao = ppi.tb_acaomunicipio.codacao
INNER JOIN ppi.tb_municipio AS municipio_1
ON municipio_1.codmunicipio = ppi.tb_municipioreferencia.codmunicipioreferencia
INNER JOIN ppi.tb_acaoprocedimento
ON ppi.tb_acaoprocedimento.codacao = ppi.tb_acao.codacao
INNER JOIN ppi.tb_procedimento
ON ppi.tb_procedimento.codprocedimento = ppi.tb_acaoprocedimento.codprocedimento
INNER JOIN ppi.tb_municipiopopulacao
ON ppi.tb_municipiopopulacao.codmunicipio = ppi.tb_municipioreferencia.codmunicipio
AND ppi.tb_municipiopopulacao.anobase = ppi.tb_municipioreferencia.anobase
INNER JOIN ppi.tb_municipio
ON ppi.tb_municipio.codmunicipio = ppi.tb_municipioreferencia.codmunicipio
INNER JOIN ppi.tb_microregional
ON ppi.tb_microregional.codmicroregional = ppi.tb_municipio.codmicroregional
INNER JOIN ppi.tb_regional
ON ppi.tb_regional.codregional = ppi.tb_microregional.codregional
INNER JOIN ppi.tb_macroregional
ON ppi.tb_macroregional.codmacroregional = ppi.tb_regional.codmacroregional
WHERE ppi.tb_macroregional.codmacroregional = 4104
AND ppi.tb_acaomunicipio.anobase = 2007
AND ppi.tb_acaomunicipio.codoperacao <> 'E'
ORDER BY ppi.tb_municipioreferencia.codacao

ele me trás o resultado certo, porém aparecem dados repetidos, tipo o nome do municipio, eu preciso que ele me traga apenas uma linha do municipio com os resultados da qtconsultasencaminhadas, somadas, alguém pode me ajudar?





  


2. dicas

Jeffeson Luiz Oliveira de Campos
foguinho.peruca

(usa Ubuntu)

Enviado em 12/11/2008 - 17:14h

Olá!

Bom eu li o select mas sinceramente o vol não ajuda muito qdo se trata de manter a conf das linhas e tabulações e etc....

O que eu posso dizer é que vc quebre esse select em select's menores, diminua esses joins (são muitos) e utilize funções e encapsule algumas coisas dentro de procedures/functions.... a sua consulta está muito complexa e provavelmente com um desempenho aquém do esperado.... aconselho vc a reprojetar ela.... vai facilitar a manutenção depois....

Jeff


3. Re: ajuda no SELECT

Vinicus S Moraes
vsmoraes

(usa Arch Linux)

Enviado em 12/11/2008 - 18:21h

Em certo ponto nosso amigo Jeff está certo. Dependendo do número de registros nas tebelas relacionadas, vai demorar uma eternidade para retornar o resultado esperado, além de consumir bastante memória e processamento.

Mas, por questões didaticas podemos fazer essa query funcionar. Aparentemente não há nada de errado com a sintaxe, o que está gerando os registros repetidos são os índices na hora dos joins. Verifique cada índice da relação, você pode estar esquecendo de algum ;)

PS: Parece besteira, mas o mysql se comporta bem melhor se você citar os índices em seus joins na mesma ordem que eles foram criados. Para isso basta dar um SHOW CREATE TABLE <tabela> para ver a ordem correta.


4. Re: ajuda no SELECT

gilson santos
jrchuteboxe

(usa Ubuntu)

Enviado em 12/11/2008 - 19:59h

cara, pior que sou bem iniciante em sql... se alguém puder colocar ai o que faria com código e tudo eu agradeço muito pq sei que sozinho vou apanhar muito, mas mesmo assim obrigado pelas dicas, com certeza vou aproveitá-las






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts