On Wed, Aug 28, 2013 at 11:05 AM, Felipe Pamboukian <
[email protected]> wrote:
> Bom dia,
>
> Gostaria de fazer um case com inner join mais não estou conseguindo,
> alguém posso de dar uma ajuda?
>
>
> select mte.idrepesportesmt, esp.codesporte, esp.esporte,
> sb.codsubesporte, sb.subesporte, mte.iduser, u.login, mt.tipomidia,
> rd.emissora, mte.coletado, mt.dia, mt.mes, mt.ano, rd.codrede,
> mt.rotulo,
> case when mt.tipomidia = 'VHS' then pr.praca else 'NACIONAL - NET' end
> as praca,
> case when mte.coletado = '0' then 'Não Coletar' else 'Coletar' end as
> coletadoo,
> case when mte.estado = '0' then 'Pendente'
> when mte.estado = '1' then 'Concluído'
> when mte.estado = '2' then 'Em andamento' end as estado,
> case when mte.estado_user = '0' then 'Pendente'
> when mte.estado_user = '1' then 'Concluído'
> when mte.estado_user = '2' then 'Em andamento' end as
> estado_usuario
> from repesportesmt mte
> inner join cm_esporte esp on esp.codesporte = mte.codesporte
> inner join reportagemmt mt on mt.idreportagemmt = mte.idreportagemmt
> inner join jvtv_redes rd on rd.codrede = mt.codrede
> inner join cm_subesporte sb on sb.codsubesporte = mte.codsubesporte
> inner join usuarios u on u.iduser = mte.iduser
> * case when mt.tipomidia = 'VHS' then *
> * inner join cli_midia mi on mi.rotulo = mt.rotulo*
> * inner join jvtv_pracas pr on pr.codpraca = mi.codpraca_grav*
> * else*
> * inner join cli_dia d on d.rotulodia = mt.rotulo*
> * inner join jvtv_pracas pr on pr.codpraca = d.codpraca*
> * end*
> where mt.ano = :ano and mt.mes = :mes and mte.estado = :estado
> order by rd.emissora, pr.praca, mt.rotulo, mt.dia, esp.esporte,
> sb.subesporte
>
>
Me parece que o ideal seria fazer isso num condicional em sua aplicação ou
uma função no banco. Não é possível selecionar condicionalmente a tabela ao
realizar JOIN. Uma saída via SQL é realizar um LEFT JOIN (veja que não é
equivalente, vai depender de questões semânticas):
...
left join cli_midia mi on mi.rotulo = mt.rotulo
left join cli_dia d on d.rotulodia = mt.rotulo
inner join jvtv_pracas pr on pr.codpraca = case mt.tipomidia when
'VHS' then mi.codpraca_grav else d.codpraca end
...
Acho ("acho") que assim funciona, mas com certeza tem implicações negativas
quanto à performance.
Atenciosamente,
--
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral