Consulta de tabelas com especialização

Firebird

16/10/2003

Estou com uma duvida enquanto a consulta de tabelas com especializações. Tenho uma:
Cliente(Cod_Cliente, nome, endereco)
Pessoa_Fisica(Cod_Cliente, CPF,Tel_res)
Pessoa_Juridica(Cod_Cliente,CNPJ, Tel_Com)
Estou fazendo um relatório com quickreport e antes fiz uma consulta com um editor de sql para ve os resultados.
Select C.Cod_Cliente,C.Nome,C.Endereco,F.Tel_Res,J.Tel_Com from cliente C, Pessoa_Fisica F,Pessoa_Juridica J
traz os resultados, mas com tel_res e Tel_Com duplicados que não existam no banco.
Queria trazer assim:
Nome Endereco Tel_Res Tel_Com
Mario Bahia 321-2139
Extra 13 maio 321-2394
Como faço isso? Ou sera que e impossivel?
Ah...O relatorio ia fazer atraves de uma view...
Por favor, help!


Naonob

Naonob

Curtidas 0

Respostas

Afarias

Afarias

16/10/2003

Bom... é bom vc dar uma boa estudada em SQL principalmente na parte de JOINS ... seu problema é q vc não está especificando como as tabelas se relacionam!!!

para ter a relação de ´pessoas físicas´ vc teria q fazer::

select c.cod_cliente, c.nome, c.endereco, f.cpf, f.tel_res
from cliente c inner join pessoa_fisica f on (f.cod_cliente = c.cod_cliente)

para ter a relação de ´pessoas jurídicas´ vc faz o mesmo (substituindo a tabela e campos claro)

e para ter TODOS os CLIENTEs vc pode usar LEFT Joins ou um UNION (os resultados são um pouco diferente) ::

com left join fica::

select c.cod_cliente, c.nome, c.endereco, f.cpf, f.tel_res, j.cnpj, j.tel_com
from cliente c
LEFT join pessoa_fisica f on (f.cod_cliente = c.cod_cliente)
LEFT join pessoa_juridica j on (j.cod_cliente = c.cod_cliente)


com UNION acho q fica melhor::

select c.cod_cliente, c.nome, c.endereco, f.cpf as doc, f.tel_res as tel
from cliente c
INNER join pessoa_fisica f on (f.cod_cliente = c.cod_cliente)
UNION
select c.cod_cliente, c.nome, c.endereco, j.cnpj as doc, j.tel_com as tel
INNER join pessoa_juridica j on (j.cod_cliente = c.cod_cliente)



T+


GOSTEI 0
POSTAR