Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

AndersonJF

SQL Localizar Ultimo Lançamento de um Produto

Recommended Posts

Não consegui fazer uma consulta e tenho certeza que poderão me ajudar. Uso Delphi 7 e Firebird 2.1.

Tenho 3 tabelas:

 

Livros: CodigoLivro, I

NomeLivro, Var

 

Leitor: CodigoLeitor, I

NomeLeitor, Var

 

Movimento: CodigoMov, I

CodigoLivro, I

CodigoLeitor, I

DataDev, D

DataPrev, D

 

Preciso de uma consulta que pegue todos os Livros sem me preoculpar com mais nada, porém, se houver movimento deste livro com a DataDev nula, pegar a DataPrev e o Nomeleitor.

 

Ficaria Assim:

Livro sem movimentação : Código do Livro, Nome do livro

Livro com movimentação : Código do Livro, Nome do livro, Nome do Leitor, Data Prevista para Devolução.

 

É possivel?

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use o outer join.

Boa tarde Motta!

 

Fiz a SQL da sequinte forma:

 

Select Livros.CodigoLivro,
      Livros.NomeLivro,
      Movimento.DataPrev,
      Movimento.DataDev,
      Leitor.NomeLeitor
From Livros
Left outer Join Movimento on Livros.CodigoLivro    = Movimento.CodigoLivro
Left Outer Join Leitor    on Moviento.CodigoLeitor = Leitor.CodigoLeitor

 

Ocorre que o nome do livro está repetindo;

Se colocar um Where (Where Movimento.DataDev is Null), não repete mas o livro que teve movimento e já foi devolvido (portanto Movimento.DataDev possui uma data) não entra na consulta, somente se estiver com a DataDev em branco ou se não houver nenhum movimento do livro.

 

Onde errei?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se houver mais de um movimento vai repetir o livro mesmo pois existe mais de um movimento

tente um MAX , creio que a síntexe com outer join é assim.

 

 

Select Livros.CodigoLivro,
      Livros.NomeLivro,
      Movimento.DataPrev,
      Movimento.DataDev,
      Leitor.NomeLeitor
From Livros
Left outer Join Movimento on Livros.CodigoLivro    = Movimento.CodigoLivro
Left Outer Join Leitor    on Moviento.CodigoLeitor = Leitor.CodigoLeitor
where Movimento.DataDev = (select max(Movimento2.DataDev
                          from Movimento Movimento2
                          where Movimento2.CodigoLivro = Movimento.CodigoLivro)   

 

Tenho lá minhas dúvidas pois a síntaxe para outer join no Oracle é diferente e eu nunco uso o join assim, mais creio que é isto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.