Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

CrazyLOL

Possivel usar IF para JOIN?

Recommended Posts

Bom dia, queria saber se é possivel usar um IF para selecionar uma tabela... por exemplo montar um if dessa maneira.

 

select 
a.*,b.*,c.*
 from clientes_geral a 
IF a.tipo_cliente == 'F' THEN
 join clientes_fisico b on (b.cod_cliente = a.cod_cliente)
IF a.tipo_cliente == 'J' THEN
 join clientes_juridico b on (b.cod_cliente = a.cod_cliente)
where ......

Existe essa possibilidade? se sim, como que posso montar?

 

Obrigado :D

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma solução :

 

Crie uma view que una clientes_fisico e clientes_juridico

 

 

create or replace view v_clientes as
select 'fisico' tipo,cod_cliente,cpf cpf_cnpj,nome
from clientes_fisico
union all
select 'juridico' tipo,cod_cliente,cnpj cpf_cnpj,nome
from clientes_juridico

Faço o join na VIEW

 

select a.*
from clientes_geral a 
  join v_clientes b on (b.cod_cliente = a.cod_cliente)

... mas o que vem a ser clientes_geral ?!

 




			
		

Compartilhar este post


Link para o post
Compartilhar em outros sites

Clientes_geral são dados principais, que tanto faz um cliente juridico ou fisico ter, assim eu utilizo apenas 1 formulario basicamente para salvar qualquer tipo de cliente. única coisa q muda são essas 2 tabelas...

 

Mas gostei da sugestão e vou fazer isso

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça então uma view com o join

 

 

CREATE OR REPLACE VIEW V_CLIENTE_GERAL_DADOS
AS
SELECT .....
FROM CLIENTE_GERAL,CLIENTE_FISICO
WHERE CLIENTE_GERAL_ID = CLIENTE_FISICO_ID
UNION ALL 
SELECT .....
FROM CLIENTE_GERAL,CLIENTE_JURIDICO
WHERE CLIENTE_GERAL_ID = CLIENTE_JURIDICO_ID

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT  A.*,B.*,C.*
FROM clientes_geral A
LEFT JOIN clientes_fisico B ON(B.cod_cliente = A.cod_cliente AND A.tipo_cliente = 'F') 
LEFT JOIN clientes_juridico C ON(C.cod_cliente = A.cod_cliente AND A.tipo_cliente = 'J') 
WHERE 1;

Você não precisa usar IF nestes casos.

 

Mas se fosse necessário, usaria algo como isso:

 

SELECT IF(A.tipo_cliente='F',A.*,null) as 'Dados Cliente F',
       IF(A.tipo_cliente='J',A.*,null) as 'Dados Cliente J',
       B.*,C.*
FROM clientes_geral A
LEFT JOIN clientes_fisico B ON(B.cod_cliente = A.cod_cliente AND A.tipo_cliente = 'F') 
LEFT JOIN clientes_juridico C ON(C.cod_cliente = A.cod_cliente AND A.tipo_cliente = 'J') 
WHERE 1;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu faria algo assim

 

SELECT cg.*, IF(cg.tipo_cliente='F',(SELECT cj.nome_do_campo clientes_juridico cj WHERE cg.cod_cliente = cj.cod_cliente),(SELECT cf.nome_do_campo clientes_fisico cf WHERE cg.cod_cliente = cf.cod_cliente)) AS campoX FROM clientesGeral cg

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.