Avatar billede hulla Novice
22. november 2009 - 10:42 Der 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
Avatar billede 2c Nybegynder
22. november 2009 - 10:45 #1
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

måske
Avatar billede hulla Novice
22. november 2009 - 11:21 #2
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
Avatar billede janus_007 Nybegynder
22. november 2009 - 13:06 #3
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.
Avatar billede 2c Nybegynder
22. november 2009 - 13:48 #4
Hvis du sætter group by i bunden, skal du ikke gruppere på ProductImages.Id hvis du, som der står, tager max på den.
Avatar billede hulla Novice
23. november 2009 - 10:16 #5
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.

Er det i orden i deler pointene?
Avatar billede 2c Nybegynder
23. november 2009 - 10:22 #6
For mig er det i orden, hvis det altså er mig du spørger :-)
Avatar billede janus_007 Nybegynder
23. november 2009 - 23:51 #7
Så deler vi bare :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester