MySQL Forums
Forum List  »  Portuguese

Selecionar segunda tabela de acordo com o campo da primeira
Posted by: Leonardo Cesar Teixeira
Date: July 23, 2011 03:19PM

Olá pessoal,

Eu tenho as seguintes tabelas:

clientes
clientes_pf
clientes_pj

Na tabela "clientes" eu armazeno as informações comuns a todos os tipos de clientes (ID, email, telefones, data de cadastro, etc), na tabela "clientes_pf" os dados de pessoas físicas (CPF, RG, sexo, data de nascimento, etc) e na tabela "clientes_pj" os dados de pessoas jurídicas (CNPJ, IE, nome do responsável, etc).

Pois bem, a minha dúvida é como fazer uma consulta com duas tabelas onde a segunda tabela seja definida de acordo com um campo da primeira.

Na primeira tabela (clientes) eu tenho um campo chamado "tipo_pessoa" do tipo ENUM que pode ser "fisica" ou "juridica". Se este campo estiver definido como "fisica" selecionar a tabela "clientes_pf" e se estiver como "fisica" a tabela "clientes_pj".

Eu tentei fazer a consulta da seguinte forma:

-----------------------------------------

SELECT c.tipo_pessoa AS tipo, c.email, c.telefone_1, IF('tipo' = 'Fisica', 'clientes_pf', 'clientes_pj') AS t2, t2.*
FROM clientes AS c
INNER JOIN t2
ON c.id_cliente = t2.id_cliente

-----------------------------------------

Eu criei uma condição, se o valor do campo "tipo_pessoa" for "Fisica" eu seto o nome da tabela como "clientes_pf", se não, como "clientes_pj".

O nome da tabela é colocado no alias "t2", até aí tudo bem, eu testei e está funcionando.

O problema está quando eu faço o INNER JOIN e o ON, eu coloco o alias "t2" mas ele interpreta como se "t2" fosse o nome da tabela. Como faço pra isso não acontecer?

Espero ter sido claro e agradeço qualquer ajuda. :)

Options: ReplyQuote


Subject
Views
Written By
Posted
Selecionar segunda tabela de acordo com o campo da primeira
4451
July 23, 2011 03:19PM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.