juntar 2 tabelas com condição na segunda

1. juntar 2 tabelas com condição na segunda

roberto
sreletronica

(usa Slackware)

Enviado em 03/11/2017 - 13:40h

boa tarde, pessoal, preciso juntar duas tabelas, sendo a primeira apresentando todos os registros contido nela, com a condição de o que estiver na segunda tabela tem um preço menor com data_ini e dt_fim usando o current_date para definir se esta dentro da condição ou seja, dentro da data vigente..

exemplo

tabela1
------------------------------------------------------------------------------------------------------
cod_barras | descrição | preco
--------------------------------------------------------------------------------------------------------
00000000000017 | PAO DE SAL | 0,50
00000000000122 | PEPSI 1 5L | 5,00
00000000000987 | TAIOBA | 2,00
00000000001526 | ALHO KG | 20,00


tabela 2
------------------------------------------------------------------------------------------------------
barras | preco | DT_ini | DT_FIM
--------------------------------------------------------------------------------------------------------
00000000000017 | 0,30 | 03/11/2017 | 10/11/2017
00000000001526 | 15,00 | 05/11/2017 | 08/11/2017

considerando que a current_date = 04/11/2017
deveria ficar asim..
------------------------------------------------------------------------------------------------------
cod_barras | descrição | preco
--------------------------------------------------------------------------------------------------------
00000000000017 | PAO DE SAL | 0,30
00000000000122 | PEPSI 1 5L | 5,00
00000000000987 | TAIOBA | 2,00
00000000001526 | ALHO KG | 20,00



considerando que a current_date = 07/11/2017
deveria ficar asim..
------------------------------------------------------------------------------------------------------
cod_barras | descrição | preco
--------------------------------------------------------------------------------------------------------
00000000000017 | PAO DE SAL | 0,30
00000000000122 | PEPSI 1 5L | 5,00
00000000000987 | TAIOBA | 2,00
00000000001526 | ALHO KG | 15,00


considerando que a current_date = 11/11/2017
deveria ficar asim..
------------------------------------------------------------------------------------------------------
cod_barras | descrição | preco
--------------------------------------------------------------------------------------------------------
00000000000017 | PAO DE SAL | 0,50
00000000000122 | PEPSI 1 5L | 5,00
00000000000987 | TAIOBA | 2,00
00000000001526 | ALHO KG | 20,00



ou seja, preciso que um item que exista na tabela 2 dentro de uma data especifica pegar o preco da tabela 2 e não da tabela 1...

vai pegar o valor da tabela 1, se não estiver contido na tabela 2 e dentro da data vigente..

quem puder ajudar... ta um pouco difícil



  


2. Re: juntar 2 tabelas com condição na segunda

Felipe
nctfelipe

(usa Debian)

Enviado em 05/11/2017 - 10:41h

Pelo que entendi, você só precisa adicionar as condições que você citou aí no LEFT JOIN da sua consulta:

- A coluna cod_barras da tabela1 deve ser igual a coluna barras da tabela2
- A coluna preco da tabela2 deve ser menor que a coluna preco da tabela1
- A data atual deve estar entre as colunas data_ini e dt_fim da tabela2

Se cada uma dessas condições for verdadeira, aí recupera o valor para o preco na consulta certo?

Então a consulta será mais ou menos assim:

SELECT
cod_barras,
descricao,
COALESCE(tabela2.preco, tabela1.preco) AS preco
FROM tabela1
LEFT JOIN tabela2 ON (
tabela1.cod_barras = tabela2.barras AND
tabela2.preco < tabela1.preco AND
CAST('Now' AS date) BETWEEN tabela2.data_ini AND tabela2.dt_fim
)


Ps. Nunca tive contato com o Firebird, pesquisei rápido aqui e achei essa constante 'NOW'
https://firebirdsql.org/refdocs/langrefupd21-now.html
Desconheço se existe uma função ou alguma outra forma mais prática






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts