Fórum Uso do Left Join com mais de uma tabela. #297060

26/09/2005

0

Seguinte . . . preciso mostras os contribuintes cujo codigo está distribuido em 3 tabelas de cálculos, ou seja, mostras os contribuintes que contenha calculo na tabela1, pode conter cálculo na Tabela2 e tbém pode conter cálculo na tabela3. To pensando em usar Left Join no entanto da Tabela de contribuintes com mais outras três tabelas que podem conter cálculos ou não. Alguém pode me ajudar?


Amilton/pr

Amilton/pr

Responder

Posts

26/09/2005

Rjun

Lista a estrutura das tabelas.


Responder

Gostei + 0

27/09/2005

Amilton/pr

Obs. - Bases em Paradox

Contrib.db - Tabela de Contribuintes

NumInscric A 6
Nome A 40
Endereco A 40
Ativid N Chave strangeira
Obs. Principais campos

Ativ.db - Tabela de Atividades

CodAtiv N Chave primaria relac. com Ativ de Contrib
Atividade A 50 Descrição Atividade

CalcThe.db - Calculo Hor. Especial
NumeroInsc A 6
ValorThe N

CalcTll.db - Calculo de Alvara
NumeroInsc A 6
ValorTll N

CalcTsvs.db - Calculo Saude
NumeroInsc A 6
ValorTsvs N


Não sei se fui bem claro, mas o fato é que preciso mostrar os contribuintes que tenham ou não valor nas tabelas de CalcTll, CalcThe e CalcTsvs, cujos códigos de atividades seja iguais(Contrib.Db com Ativ.db).

Espero ajuda . . .


Responder

Gostei + 0

27/09/2005

Rjun

Acho que o select é esse, embora eu não tenha testado com [b:f720c2beb0]paradox[/b:f720c2beb0]. Apenas gostaria de fazer uma observação. Quando se estuda normalização, aprendemos que tabelas com a mesma chave primária, são a mesma tabela. Então, você tem 4 tabelas com a mesma chave primária. Pense nisso.

SELECT 
  Co.NumInscric,
  Co.Nome,
  Av.Atividade,
  Ct.ValorThe,
  Cl.ValorTll,
  Cs.ValorTsvs  
FROM
  Contrib Co
LEFT JOIN
  Ativ Av on Av.CodAtiv = Co.Ativid
LEFT JOIN
  CalcThe Ct on Ct.NumeroInsc = Co.NumInscric
LEFT JOIN
  CalcTll Cl on Cl.NumeroInsc = Co.NumInscric
LEFT JOIN
  CalcTsvs Cs on Cs.NumeroInsc = Co.NumInscric



Responder

Gostei + 0

27/09/2005

Amilton/pr

Blz., somente uma questão . . . Os dados do contribuinte estão na tabela Contribuinte(Obviamente), então eu não deveria fazer o Left Join do contribuinte para as tabelas que possivelmente existiria cálculo ou não para que fosse mostrado a tabela da esquerda(Contrib.db) havendo assim o relacionamento com a outra tabela?
Obrigado pela atenção


Responder

Gostei + 0

27/09/2005

Rjun

[quote:43eb53e4bf=´Amilton/Pr´]Blz., somente uma questão . . . Os dados do contribuinte estão na tabela Contribuinte(Obviamente), então eu não deveria fazer o Left Join do contribuinte para as tabelas que possivelmente existiria cálculo ou não para que fosse mostrado a tabela da esquerda(Contrib.db) havendo assim o relacionamento com a outra tabela?[/quote:43eb53e4bf]

E não foi isso que eu fiz?


Responder

Gostei + 0

27/09/2005

Amilton/pr

Veja bem . . .

LEFT JOIN
Ativ Av on Av.CodAtiv = Co.Ativid
LEFT JOIN
CalcThe Ct on Ct.NumeroInsc = Co.NumInscric
LEFT JOIN
CalcTll Cl on Cl.NumeroInsc = Co.NumInscric
LEFT JOIN
CalcTsvs Cs on Cs.NumeroInsc = Co.NumInscric

Eu entendo que tá mostrando a tabela da esquerda onde tem o calculo e não tem o nome e sim o valor do cálculo = a tabela de contribuintes onde está o nome. Não deveria ser ao contrário? mas pra ser ao contrário pode-se repetir a tabela de contribuintes várias vezes pra cada tabela?

SDS


Responder

Gostei + 0

27/09/2005

Rjun

Agora você ta me deixando confuso. A tabela da esquerda não é a de contribuintes?


Responder

Gostei + 0

27/09/2005

Amilton/pr

Não. As tabelas CalcThe, CalcTsvs, CalcTll é que estão asrmazenados os valores calculados. A tabela Contrib.db é a tabela de Cadastrado de Contribuintes. A idéia é Mostrar os dados do contribuinte juntamente com o valor calculado nas tabelas de Calculos que são CalcThe, CalcTsvs e CalcTll.

SDS.


Responder

Gostei + 0

27/09/2005

Rjun

Mas não é isso que está sendo exibido?


Responder

Gostei + 0

27/09/2005

Amilton/pr

Seguinte . . . Vou rodar essa Query no Projeto e respondo; Vc. sabe se posso fazer ao contrario, assim:

LEFT JOIN
Ativ Av on Av.CodAtiv = Co.Ativid
LEFT JOIN
Co.NumInscric = CalcThe Ct on Ct.NumeroInsc
LEFT JOIN
Co.NumInscric = CalcTll Cl on Cl.NumeroInsc
LEFT JOIN
Co.NumInscric = CalcTsvs Cs on Cs.NumeroInsc


Responder

Gostei + 0

27/09/2005

Rjun

Acho que não. A sintaxe é essa que utilizei.


Responder

Gostei + 0

27/09/2005

Martins

Acho que não. A sintaxe é essa que utilizei.


Não rodei nada aqui, mas acredito q vc está certo [b:aab0ed2da2]Rjun[/b:aab0ed2da2], agora vamos esperar o nosso amigo postar aqui novamente para ver o q ele conseguiu.


Responder

Gostei + 0

27/09/2005

Andremuller

o sql do rjun está correto,
porém fica outra dúvida.

o colega disse que quer os contribuintes ´que [b:f4dcb3d401]CONTENHA[/b:f4dcb3d401] calculo na tabela1, [b:f4dcb3d401]pode conter[/b:f4dcb3d401] cálculo na Tabela2 e tbém [b:f4dcb3d401]pode conter[/b:f4dcb3d401] cálculo na tabela3

pelo descrito eu entendi que no primeiro relacionamento deve ser um inner ao invés de um left.


Responder

Gostei + 0

28/09/2005

Amilton/pr

Ta funcionando, mas agora tá repetindo o registro várias vezes dentro da Banda(To usando o QuickReport com Delphi6). Acho que falta algum Parámetro pra não repetir o registro tantas vezes. Alguém pode ajudar?


Responder

Gostei + 0

28/09/2005

Rjun

Está repetindo o mesmo registro? Coloque uma parte do relatório.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar