consulta 2 tabelas

1. consulta 2 tabelas

roberto
sreletronica

(usa Slackware)

Enviado em 26/10/2017 - 00:31h



boa noite, pessoal, preciso de ajuda em uma consulta 2 tabelas if existe id na segunda aparece preço se não aparece preço da primeira tabela..

exemplo



tabela1 tabela2

------------------------------------ --------------------------------------------------------

id | descricao | preço id | dtini | dtfim | preço

17 | pao de sal | 9,00 20 | 26/10/2017 | 30/10/2017 | 1,99

18 | bolo | 10,80 17 | 26/10/2017 | 10/11/2017 | 6,10

20 | Quiabo | 2,99

23 | Tomate | 3,50





de modo que quando execultar a consulta resulte desta forma



tabela1

------------------------------------------------------------------------

id | descricao | preço

17 | pao de sal | 6,10

18 | bolo | 10,80

20 | Quiabo | 1,99

23 | Tomate | 3,50



de modo que vou dar um select na tabela1 e listar tudo mas se a id existir na tabela2 pregar o preço da tabela2, se não existir manter o preço da tabela1..



Quem puder ajudar...



pode ser em postgres, fb,, mysql..





  


2. Re: consulta 2 tabelas

Felipe
nctfelipe

(usa Debian)

Enviado em 26/10/2017 - 15:37h

No PostgreSQL existe uma função chamada COALESCE, provavelmente exista alguma função
correspondente no Firebird, ela resolve justamente seu problema, ela aceita N parâmetros exemplo:

COALESCE(tabela2.preco, tabela1.preco) 


E irá te retornar o primeiro valor não nulo.


3. tabela 2 na tabela 1 com data vigente

roberto
sreletronica

(usa Slackware)

Enviado em 28/10/2017 - 10:25h

ja tentei --- até que da certo, mas preciso que esta ação esteja dentro de uma data vigente, e quando coloco a data de vigencia só aparece itens que estão contidos na tabela 2....

tentei destas formas...


select a.prd_codigo_barras Codigo, a.prd_descricao,
iif(b.preco is null, a.preco_atual, b.preco) from cap_produto a
left join promoii b on b.barras = a.prd_codigo_barras where b.dtinicio <= current_date and b.dtfim >= current_date

select a.prd_codigo_barras Codigo, a.prd_descricao,
coalesce( b.preco , a.preco_atual ) preco
from cap_produto a
LEFT OUTER JOIN promoii b
on b.barras = a.prd_codigo_barras where b.dtinicio <= current_date and b.dtfim >= current_date

tabela 1 = cap_produto
tabela 2 = promoii
preciso que tabela2 aparece na tabela1 na vigencia de preço contido na tabela 2....

quando coloco where b.dtinicio <= current_date and b.dtfim >= current_date só aparece itens que estão contido na tabela 2





4. Re: consulta 2 tabelas

Perfil removido
removido

(usa Nenhuma)

Enviado em 28/10/2017 - 18:13h

#voltameianoite TESTE DE PENETRACAO http://boypost.com/wp-content/uploads/2016/01/anal-gay-sex-6.gif #voltameianoite


5. Re: consulta 2 tabelas

Perfil removido
removido

(usa Nenhuma)

Enviado em 28/10/2017 - 18:33h

#voltameianoite TESTE DE PENETRACAO http://boypost.com/wp-content/uploads/2016/01/anal-gay-sex-6.gif #voltameianoite


6. Re: consulta 2 tabelas

Felipe
nctfelipe

(usa Debian)

Enviado em 31/10/2017 - 10:31h

sreletronica escreveu:

ja tentei --- até que da certo, mas preciso que esta ação esteja dentro de uma data vigente, e quando coloco a data de vigencia só aparece itens que estão contidos na tabela 2....

tentei destas formas...


select a.prd_codigo_barras Codigo, a.prd_descricao,
iif(b.preco is null, a.preco_atual, b.preco) from cap_produto a
left join promoii b on b.barras = a.prd_codigo_barras where b.dtinicio <= current_date and b.dtfim >= current_date

select a.prd_codigo_barras Codigo, a.prd_descricao,
coalesce( b.preco , a.preco_atual ) preco
from cap_produto a
LEFT OUTER JOIN promoii b
on b.barras = a.prd_codigo_barras where b.dtinicio <= current_date and b.dtfim >= current_date

tabela 1 = cap_produto
tabela 2 = promoii
preciso que tabela2 aparece na tabela1 na vigencia de preço contido na tabela 2....

quando coloco where b.dtinicio <= current_date and b.dtfim >= current_date só aparece itens que estão contido na tabela 2




Vish, não compreendi direito o que você está tentando



7. Re: consulta 2 tabelas

Guilherme
guipsp

(usa Ubuntu)

Enviado em 31/10/2017 - 16:54h

Imagino algo mais ou menos assim:


SELECT
t1.descricao,
CASE
WHEN t2.id IS NULL THEN t1.preco
ELSE t2.preco
END AS preco
FROM
tabela1 t1
LEFT JOIN tabela2 t2 on t2.id = t1.id
WHERE
t2.dtini >= '20171001' and dtfim <= '20171031'



https://firebirdsql.org/refdocs/langrefupd15-case.html






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts