Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde galera.
Construí uma View que está funcionando:
select t.id_tramitacao AS id_tram,p.id_protocolo AS id_prot,p.protocolo AS num_prot,p.id_contrib AS id_contrib,p.numero_doc AS num_doc,c.fnome AS nome,c.lnome AS sobrenome,p.assunto AS assunto,t.id_setor_origem AS id_setor_rem,s1.sigla AS sigla_rem,serv1.fnome AS serv_rem,t.id_setor_destino AS id_setor_dest,s2.sigla AS sigla_dest,s2.id_estrutura AS id_estrutura,serv2.fnome AS serv_dest,t.data_tramitacao AS data from (((((radocs.tbl_prot_tramitacoes t left join radocs.tbl_setores s2 on((t.id_setor_destino = s2.id_setor))) left join radocs.tbl_servidores serv2 on((t.id_serv_recebe = serv2.id_servidor))) join ((radocs.tbl_protocolos p left join radocs.tbl_contribuintes c on((p.id_contrib = c.id_contrib)))) join radocs.tbl_servidores serv1) join radocs.tbl_setores s1) where ((t.id_protocolo = p.id_protocolo) and (t.id_serv = serv1.id_servidor) and (t.id_setor_origem = s1.id_setor))
Acontece que, dependendo do que for encontrado id_estrutura ( s2.id_estrutura AS id_estrutura ) que pode ser NULL ou não, eu preciso buscar o nome do servidor em tabelas distintas.
Do jeito q tá o nome vem da tabela SERVIDORES, tbl_servidores que no código eu procuro em left join radocs.tbl_servidores serv2 on((t.id_serv_recebe = serv2.id_servidor))
Caso o id_estrutura seja NOT NULL, ok, ta dando certo, mas se for NULL essa condição deve ser alterada para a tabela tbl_recebedores left join radocs.tbl_recebedores rec on((t.id_serv_recebe = rec.id_recebedor))
eu preciso de algo como:
if id_estrutura IS NOT NULL
left join radocs.tbl_servidores serv2 on((t.id_serv_recebe = serv2.id_servidor))
ELSE
left join radocs.tbl_recebedores rec on((t.id_serv_recebe = rec.id_recebedor))
estou errando a sintaxe.
Sem entrar no mérito do modela faça uma view que una as duas tabelas de "servidores" sua view usaria esta view.
A peformance poderia ser um problema todavia.
Motta, mas se eu fizer um view, eu ainda teria algo como SERVIDOR com ID 1 e RECEBEDOR com ID 1.
Na verdade, explicando mais ou menos, é pq quando envio documentos externos, os RECEBEDORES sao cadastrados em meu sistema na tabela "tbl_recebedores" e gravo o ID desse RECEBEDOR na tbl_tramitacoes.
Se o documento for enviado internamente, quem o receberá será um servidor já cadastrado e também gravo o ID desse SERVIDOR na tbl_tramitacoes.
Nao tem como usar esse tipo de condição em uma QUERY ?
tente algo do tipo
select * from <recebidos>
union all
select * form <enviados>
left join
,IF(
id_estruturaIS NOT NULL,radocs.tbl_servidoresserv2on((t.id_serv_recebe=serv2.id_servidor)),radocs.tbl_prot_recebedoresserv2on((t.id_serv_recebe=serv2.id_recebedor)))
Ainda não consegui, alguém poderia reproduzir um exemplo qualquer que use esse IF dentro de uma view ????