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

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts