Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Duvida sobre Select SQL

Oi,

Queria saber o seguinte:

Se eu tiver duas tabelas, sendo clientes e compras:

sendo a tabela clientes: id_cliente nome e a tabela compras: id_compra data_compra preco Id_cliente

se eu quiser buscar o o nome e o preço da ultima de todos os clientes como eu faria isso? alguém pode me ajudar?

8 respostas

Oi Lucas tudo bem?

Faz dessa forma :


SELECT *  FROM CLIENTES 
INNER JOIN COMPRAS 
ON CLIENTES.ID_CLIENTE=COMPRAS.ID_CLIENTE 
WHERE DATA_COMPRA=
    (SELECT MAX(DATA_COMPRA) FROM COMPRAS
     WHERE CLIENTES.ID_CLIENTE=COMPRAS.ID_CLIENTE)

Espero ter ajudado!!!

Eu tentei selecionar, no BD livraria de um curso que fiz na alura , pq era o banco que eu tinha pronto aqui, tentei selecionar o nome do autor, e o titulo, q foi publicado mais recente. mas só me devolveu um autor tem como me dizer onde eu errei? Eu queria todos os com data mais recente de todos os autores. a estrutura das tabelas são

Tabela autor: id, email, nome.

Tabela Livro: id, dataLancamento, isbn, preco, titulo.

Tabela livro_autor: livro_id, autores _id

A minha sentença ficou:

select a.nome, l.titulo from livro as l
inner join autor as a 
inner join livro_autor as la 
on a.id=la.autores_id and l.id = la.livro_id 
where dataLancamento = 
(select max(dataLancamento) from livro as l 
inner join autor as a 
inner join livro_autor as la 
where a.id=la.autores_id and l.id = la.livro_id);

No segundo select você selecionou todo mundo, vc tinha que selecionar só a tabela onde está a dataLancamento.

Ficaria assim:

select a.nome, l.titulo from livro as l
inner join autor as a 
inner join livro_autor as la 
on a.id=la.autores_id and l.id = la.livro_id 
where dataLancamento = 
    (select max(dataLancamento) from livro as l 
    where a.id=la.autores_id and l.id = la.livro_id);

Essa sentença chamou todos os livros, não selecionou apenas os com as datas mais antigas, sendo q eu tenho um livro com ano de publicação de 1891 e 2018 e os dois foram chamados

Qual software de SQL está usando?

eu estava tentando fazer pelo cmd

mas eu tenho o mysql workbench instalado aqui nele funcionaria?

solução!

Tanto faz, mas o workbench é melhor para aprendizado estou usando ele também para simular.

Aqui está o código:

Basicamente eu fiz o mesmo que antes com a tabela de compras. Criei um subselect SUPER_LIVRO que é SELECT * FROM LIVRO INNER JOIN LIVRO_AUTOR ON LIVRO_AUTOR.LIVRO_ID=LIVRO.ID

para facilitar a vida e dei um um where com select max denovo no subselect SUPER_LIVRO.

SELECT * FROM AUTOR
INNER JOIN (SELECT * FROM LIVRO
INNER JOIN LIVRO_AUTOR
ON LIVRO_AUTOR.LIVRO_ID=LIVRO.ID) AS SUPER_LIVRO
ON AUTOR.ID=SUPER_LIVRO.AUTORES_ID
WHERE DATALANCAMENTO = 
    (SELECT MAX(DATALANCAMENTO) FROM (SELECT * FROM LIVRO
INNER JOIN LIVRO_AUTOR
ON LIVRO_AUTOR.LIVRO_ID=LIVRO.ID) AS SUPER_LIVRO
    WHERE AUTOR.ID=SUPER_LIVRO.AUTORES_ID);

Testa lá e veja se deu certo, dessa vez eu testei aqui e deu tudo ok.

A ta, entendi.

André, obrigado pela ajuda.