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

Asked

Viewed 676 times

-1

I’m having difficulty creating a select that searches data in two tables, follows the description:

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 advertising.

4 answers

1

Use the DISTINCT to select only the first image combined with the 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
  • But he only wants the first.

0

I think it 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
  • friend, I thought changing the limit would bring me more products, but he lists the same product but with the other images, as I would to pick up various products with just one image?

  • I edited the answer... see if it helps.

  • that there friend, thank you very much. In case I want to catch up to 6 random products just change my order by to "ORDER BY RAND() LIMIT 0.6". right?

  • @Nilsonuehara, a doubt the group by of a field makes return only one row of the other columns ? and only one detail need not have p.id_product and i.id_product in select if they are already equal.

0

Something like that:

SELECT * FROM produto p
INNER JOIN imagem i ON p.id_produto = i.id_produto
GROUP BY p.id_produto

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

Browser other questions tagged

You are not signed in. Login or sign up in order to post.