In my database, I have two columns, products, and products_photos, where products can have many products_photos. What I want to do is a query that returns the products but with only one photo. I manage to write a query like this:
x
SELECT products.*, file
FROM products, products_photos
WHERE products.id = products_photos.product_id
ORDER BY products.id
But still, this returns the same product, multiple times, because of the photos. I already tried to use DISTINCT and LIMIT but does not work properly.
Advertisement
Answer
First, learn to use proper, explicit, standard, readable JOIN
syntax. Never use commas in the FROM
clause.
Second, Postgres has a very convenient extension, DISTINCT ON
, that does what you want:
SELECT DISTINCT ON (p.id) p.*, pp.file
FROM products JOIN
products_photos pp
ON p.id = pp.product_id
ORDER BY p.id