Для этого набора данных это должно сделать простое агрегирование:
SELECT p.*, min(i.image)
FROM products p
LEFT JOIN product_images i ON p.id = i.product_id
GROUP BY <enumerate all columns from products here>
ORDER BY created_at DESC
LIMIT ${limit}
Если вам нужно больше столбцов из product_images
, то вы также можете фильтровать с помощью коррелированного подзапроса; при условии, что product_images
имеет первичный ключ id
, он будет выглядеть следующим образом:
SELECT p.*, i.image
FROM products p
LEFT JOIN product_images i
ON i.id = (SELECT MIN(i1.id) FROM product_images i1 WHERE i1.product_id = p.id)
ORDER BY created_at DESC
LIMIT ${limit}