• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

ruitalia

Relação duas Tabelas

5 mensagens neste tópico

Boas pessoal.

Cá estou eu com mais duvida nas minhas brincadeiras:

Tenho duas tabelas:

precos_gasoleo
id, valor(€), inicio (data)

Abastecimentos
id, data, litros

Tabela Abastecimentos:

Registos de abastecimentos com info de data e quantidade

Tabela Preços Gasóleo:

Registos das alterações do PMVP do Gasóleo

O que queria era saber o valor (€) de uma query de Abastecimentos (Lts) entre a data X e Y, sabendo que os preços por litro estão na tabela precos_gasoleo.

Uma vez que tenho de relacionar as tabelas de modo a multiplicar o preço por litro pela quantidade abastecida, não estou a chegar lá...

Alguma sugestão?

Obrigado!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens q relacionar as chaves com um join.


select t1.id, t1.Data, t1.litros, t2.Valor from Abastecimentos t1
inner join(
select id, Valor from precos_gasoleo )t2
on t1.id = t2.id

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Creio que não tens nenhuma chave dos abastecimentos para o preço, ou seja os campos id que tens ai são as chaves primárias das tabelas.

Se assim for:

1 - A query do bruno1234 não serve porque está assumir que as tabelas se relacionam pelo campo id, o que não é verdade.

2 - Sem mudares o modelo terás de fazer o seguinte: primeiro filtras pelas datas X e Y, do resultado obtido tens, por cada abastecimento, de encontrar o intervalo de datas entre alteração de preço para cada um dos abastecimentos, depois multiplicas os litros pelo preço do combustível para todos os abastecimentos entre essas datas.

Uma solução obviamente mais simples e eficiente (a abordagem que o bruno1234 tentou fazer) é ter uma chave estrangeira nos abastecimentos que indique qual o preço do gasóleo. Com essa chave, a query é extremamente simples:

select pg.valor * a.litros as TOTAL

from precos_gasoleo pg,

abastecimentos a

where

a.fk_precos_gasoleo_id = pg.id

and a.data between (DATA_X, DATA_Y)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Exacto, nem me tinha apercebido disso.

Para a minha query funcionar as tabelas teriam q ficar:

precos_gasoleo

id, valor(€), inicio (DATA)

Abastecimentos

id, fk_id, DATA, litros

em q o id dos preços de gasoleo relaciona com o fk_id dos abastecimentos.

Depois na query é alterar:

ON t1.id = t2.id

por

ON t1.fk_id = t2.id

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bruno1234, o M6 tem razão. O ID de cada tabela não estão relacionados, são apenas os indices de cada tabela.

A solução que o M6 apresentou foi a que acabei por utilizar e já está a bombar.

Para cada abastecimento tive de ir buscar o preço entrado em vigor imediatamente anterior (pela data) e multiplicá-lo pelos litros.

Obrigado! :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora