22. november 2009 - 10:42Der er
5 kommentarer og 2 løsninger
SQL, inner join
Hej
Jeg har to tabeller: Products og ProductImages. Der kan være mange images tilhørende hvert produkt.
Jeg vil nu gerne have en sql sætning der giver mig en række produkter og bare det første billede til hvert produkt. Hvordan gøres det?
Følgende giver for mange da hvert produkt har flere billeder:
SELECT TOP (@NumberOfReturnedRows) Title, Price, ProductImages.Id FROM Products INNER JOIN ProductImages ON Products.Id = ProductImages.ProductId WHERE CategoryId = @CategoryId
SELECT TOP (@NumberOfReturnedRows) Title, Price, Max(ProductImages.Id) FROM Products INNER JOIN ProductImages ON Products.Id = ProductImages.ProductId GROUP BY Title, Price WHERE CategoryId = @CategoryId
Det vil jo ikke virke perfmon. Group by kan slet ikke placeres der, og sættes den korrekt i bunden kræver det at ProductImages.Id inkluderes i Group By'en og dermed er jeg lige vidt
SELECT TOP (@NumberOfReturnedRows) Title, Price, (select top 1 ProductImages.Id from ProductImages where ProductImages.ProductId = Id) as PImageId FROM Products WHERE CategoryId = @CategoryId
eller som perfmon skrev: SELECT TOP (@NumberOfReturnedRows) Title, Price, Max(ProductImages.Id) FROM Products INNER JOIN ProductImages ON Products.Id = ProductImages.ProductId WHERE CategoryId = @CategoryId GROUP BY Title, Price
Du vil jo bare have et Id, her får Max Id fra ProductImages.
Super, det virker jo, og undskyld perfmon, jeg så ikke din MAX. Jeg bliver dog nødt til at bruge janus's eksempel da jeg skal bruge mere end Id, og derfor ikke kan bruge MAX.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.