have a problem with sql query, simple one but though I’m sitting on it 3d day and cant figure out what is wrong, please help.
Table 2
Desired result – in my reslt I want to display each portfolio ID ONLY ONCE.
sql query:
SELECT DISTINCT `portfolio`.`id`, `Description`,`Title`, `portfolio_images`,`Date_created` FROM `portfolio` LEFT OUTER JOIN `portfolio_images` ON `portfolio_images`.`portfolio_id` = `portfolio`.`id`
Any ideas / solutions are welcomed. Thank you
Advertisement
Answer
Use row_number()
:
SELECT p.*, pi.* FROM `portfolio` LEFT OUTER JOIN (SELECT pi.*, ROW_NUMBER() OVER (PARTITION BY portfolio_id ORDER BY portfolio_id) as seqnum FROM portfolio_images pi ) pi ON pi.portfolio_id = p.id AND seqnum = 1;
EDIT:
In older versions, if you want just one column from portfolio_images
you can use a correlated subquery:
select p.*, (select pi.portfolio_images from portfolio_images pi where pi.portfolio_id = p.id limit 1 ) as portfolio_images from portfolio p;
As for your query, DISTINCT
applies to all columns, so clearly different columns have different values, even if the columns from portfolio
are the same.