Select com várias tabelas relacionadas

Firebird

14/03/2012

Galera eu estou precisando fazer uma consulta que me traga todos os clientes e os seguinte campos das outras tabelas relacionadas, rota, area e setor. conto com a ajuda de vocês.

Abaixo estou passando a estrutura de relacionamento no link abaixo;
http://www.7master.com.br/estrutura.gif

Eu estou fazendo esse select abaixo mas os clientes ficam duplicados.

SELECT distinct c.cli_id,
c.cli_razao, R.rot_descricao, A.are_descricao, S.set_descricao
FROM SETORES S
INNER JOIN ROTAS R
ON (R.ROT_ID = S.rota1)
OR (R.ROT_ID = S.rota2) OR (R.ROT_ID = S.rota3)
OR (R.ROT_ID = S.rota4) OR (R.ROT_ID = S.rota5)
OR (R.ROT_ID = S.rota6) OR (R.ROT_ID = S.rota7)
INNER JOIN AREAS A ON A.are_id = S.are_id
INNER JOIN CLIENTES C ON C.ROT_ID = R.ROT_ID
Sidney Abreu

Sidney Abreu

Curtidas 0

Respostas

Bruno Leandro

Bruno Leandro

14/03/2012

tenta desta forma

SELECT c.cli_id,
c.cli_razao,
R.rot_descricao,
A.are_descricao,
S.set_descricao
FROM CLIENTES C
INNER JOIN ROTAS R
ON (R.ROT_ID = C.ROT_ID)
INNER JOIN SETORES S
ON (S.rota1 = C.ROT_ID)
OR (S.rota2 = C.ROT_ID) OR (S.rota3 = C.ROT_ID)
OR (S.rota4 = C.ROT_ID) OR (S.rota5 = C.ROT_ID)
OR (S.rota6 = C.ROT_ID) OR (S.rota7 = C.ROT_ID)
INNER JOIN AREAS A
ON A.are_id = S.are_id


eu acredito que talvez uma solução para o seu modelo de banco de dados, seja colocar esses rotas dentro da tabela de setor seja outra tabela tipo setor_rota pois a utilização de tantos OR no select pode ficar lento e caso haja necessidade de mais rotas no setor voce tera que criar o rota8, rota9, etc
GOSTEI 0
Sidney Abreu

Sidney Abreu

14/03/2012

ainda está duplicando
GOSTEI 0
Bruno Leandro

Bruno Leandro

14/03/2012

você possui uma rota em mais de um setor?
GOSTEI 0
Sidney Abreu

Sidney Abreu

14/03/2012

as vezes sim e as vezes não, será que eu preciso mudar minhas tabelas?
GOSTEI 0
POSTAR