Jump to content


Photo

Busca Em Varias Tabelas [resolvido]


  • Faça o login para participar
6 replies to this topic

#1 Alexandre V. Oliveira

Alexandre V. Oliveira

    Novato no fórum

  • Usuários
  • 10 posts
  • Sexo:Não informado

Posted 30/10/2008, 14:11

Olá pessoal.. estou como seguinte problema..

Tenho 4 tabelas em questão. "pessoa, cliente, clientepfisica e clientepjur".. (especialização)
Precisao buscar os dados de todos os clientes.. os dados de um cliente pessoa Juridica, por exmplo, estão espalhados nas tabelas pessoa, cliente, e clientepjur ..

Para retornar os dados dos Clientes P. Juridica o comando seguinte funciona:
SELECT *		FROM pessoa		INNER JOIN cliente ON pessoa.idPessoa = cliente.Pessoa_idPessoa		INNER JOIN clientepjur ON cliente.Pessoa_idPessoa = clientepjur.Cliente_Pessoa_idPessoa

Mas o problema é que eu preciso dos dados de todos os cliente.. então teria que fazer um INNER JOIN nas tabelas clientepjur e clientepfisica ao mesmo tempo.. o que eu acho q nao eh possivel...

Alguem tem uma solução???


Obrigado!

Attached Files


Edição feita por: Alexandre V. Oliveira, 31/10/2008, 09:51.


#2 dddj

dddj

    Normal

  • Usuários
  • 112 posts
  • Sexo:Masculino
  • Localidade:Campo Grande

Posted 30/10/2008, 14:59

Se vc usar o camando Union acho que resolve, da uma lida e testa ai .

http://dev.mysql.com...1/pt/union.html
Djavan Loureiro - SEO Marketing - Search Engine Optimization - Otimização de Sites
Coloque seu site no topo dos sistemas de busca - Projeto SEM - Visitem o site.

#3 Alexandre V. Oliveira

Alexandre V. Oliveira

    Novato no fórum

  • Usuários
  • 10 posts
  • Sexo:Não informado

Posted 30/10/2008, 15:41

Union não dá pq as tabelas tem numeros diferentes de colunas..

[codebox]consulta SQL:

(
SELECT *
FROM pessoa
INNER JOIN cliente ON pessoa.idPessoa = cliente.Pessoa_idPessoa
INNER JOIN clientepjur ON cliente.Pessoa_idPessoa = clientepjur.Cliente_Pessoa_idPessoa
)
UNION (

SELECT *
FROM pessoa
INNER JOIN cliente ON pessoa.idPessoa = cliente.Pessoa_idPessoa
INNER JOIN clientepfisica ON cliente.Pessoa_idPessoa = clientepfisica.Cliente_Pessoa_idPessoa
)

Mensagens do MySQL :
#1222 - The used SELECT statements have a different number of columns [/codebox]

Eu coloquei um printScreen das tabelas no 1º post..

vlw

#4 boirock

boirock

    Tecnologia para todos (agora hexa campeão)

  • Usuários
  • 1559 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR
  • Interesses:PostgreSQL - PHP

Posted 30/10/2008, 17:09

Duas coisas!
1)
Para o UNION funcionar, é só definir a lista de colunas! Nem que você tenha que completar com NULLs... Não precisa usar SELECT *... isso, aliás, nem é saudável!

2)
Nem só de INNER JOIN o homem viverá. Tente com LEFT JOIN, por exemplo (y).

#5 Alexandre V. Oliveira

Alexandre V. Oliveira

    Novato no fórum

  • Usuários
  • 10 posts
  • Sexo:Não informado

Posted 30/10/2008, 19:22

Tentei algumas coisas aqui.. mas o problema eh que eu preciso de todos os dados...
E me parece que o UNION mescla os dados... poe cnpj onde pra um clientepfisica.. :shit:

ta xxxxxx.. =/

#6 boirock

boirock

    Tecnologia para todos (agora hexa campeão)

  • Usuários
  • 1559 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR
  • Interesses:PostgreSQL - PHP

Posted 31/10/2008, 07:54

Não é que "mescla" os dados... mas ele coloca uma coluna abaixo da outra!
Você tem duas opções... ou coloca NULL ou cria como cpfcnpj...
exemplos:
SELECT nome, cpf AS cpfcnpj FROM pfisicas UNION SELECT nome, cnpj AS cpfcnjp FROM pjuridicas
ou
SELECT nome, cpf, null AS cnpj FROM pfisicas UNION SELECT nome, null AS cpf, cnpj FROM pjuridicas

Sacou a idéia? Mas você tem que definir o padrão da matriz de saída dos dados antes de montar o SELECT... daí vai que é uma beleza (y)
Se fizer isso no papel anter de passar pro PC vai matar de primeira! (y)

#7 Alexandre V. Oliveira

Alexandre V. Oliveira

    Novato no fórum

  • Usuários
  • 10 posts
  • Sexo:Não informado

Posted 31/10/2008, 09:49

mmm.. sakei..

vou tentar aqui e dpois retorno..

valeu..

Valeu cara.. :yes:

consegui aki... complicada essa storia de deixar o nº de colunas iguais... mas agora eu sakei a ideia e deu certo..

se ajudar alguem o codigo ficou assim:

[codebox]SELECT pessoa.*, cliente.*, cpf, celular, dataAniversario, NULL AS cnpj, NULL AS razaoSocial, NULL AS inscEstadual, NULL AS inscMunicipal
FROM pessoa
INNER JOIN cliente ON pessoa.idPessoa = cliente.Pessoa_idPessoa
INNER JOIN clientepfisica ON cliente.Pessoa_idPessoa = clientepfisica.Cliente_Pessoa_idPessoa
UNION
SELECT pessoa.*, cliente.*, NULL AS cpf, NULL AS celular, NULL AS dataAniversario,cnpj, razaoSocial, inscEstadual, inscMunicipal
FROM pessoa
INNER JOIN cliente ON pessoa.idPessoa = cliente.Pessoa_idPessoa
INNER JOIN clientepjur ON cliente.Pessoa_idPessoa = clientepjur.Cliente_Pessoa_idPessoa[/codebox]




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq