How to make a Select from two 1-N tables and return only one record from the second?

-1

I'm having trouble creating a select that fetches data in two tables, the description follows:

Tabela produto 
( 
  id_produto, 
  nome_produto, 
  preco, 
  categoria
)

Tabela imagem 
 ( 
   id_imagem, 
   id_produto, 
   nome_imagem, 
   caminho
) 

A product can have several images, but what I need is to select 1 product and the first image of it because the first is the image to be used in the disclosure.

    
asked by anonymous 19.08.2016 / 18:27

4 answers

1

Use DISTINCT to select only the first image combined with ORDER BY .

SELECT
    DISTINCT 
    NOME,
    CAMINHO
FROM
    PRODUTO
INNER JOIN IMAGEM ON IMAGEM.ID_PRODUTO = PRODUTO.ID_PRODUTO
AND
    IMAGEM.ID_PRODUTO = 1
ORDER BY
    IMAGEM.ID_PRODUTO
    
19.08.2016 / 18:35
0

You can create a sub select to JOIN with a LIMIT 1

SELECT p.*, d.id_imagem, d.nome_imagem, d.caminho 
FROM PRODUTO p
JOIN 
(   select * from IMAGEM m
    where m.ID_PRODUTO = p.ID_PRODUTO
    ORDER BY m.ID_PRODUTO DESC
    LIMIT 1
)
D
on D.ID_PRODUTO = p.ID_PRODUTO
where p.ID_PRODUTO = 1 -- caso seja um produto especifico, se não remova .

See more details.

mysql-inner-join-select-only

-one-row-from-second-table

    
19.08.2016 / 19:19
0

I think this helps you:

select 
  p.id_produto, p.nome_produto, p.preco, p.categoria, 
  i.id_imagem, i.id_produto, i.nome_imagem, i.caminho
from produto p
left join imagem i
on i.id_produto = p.id_produto
group by p.id_produto
order by p.id_produto
    
19.08.2016 / 18:34
0

Something like this:

SELECT * FROM produto p
INNER JOIN imagem i ON p.id_produto = i.id_produto
GROUP BY p.id_produto
    
19.08.2016 / 18:40