Avatar billede kxh Nybegynder
18. april 2006 - 16:40 Der er 7 kommentarer og
1 løsning

Forespørgsel - en record

Hej

Jeg har to tabeller

t_VareKartotek
ID
VareTekst
VareNummer

t_VareKartotekPICS
VareID (Relation til ID fra den anden tabel)
PicPath

Det er altså muligt at have flere billeder på et produkt, men hvordan laver jeg et select der henter alle vare og giver
mig 1 billede (PicPath) fra den anden tabel.
Kan man lave en begrænsning på hvor mange records en JOIN laver.

// Kim
Avatar billede kjulius Novice
18. april 2006 - 18:50 #1
Nej, ikke på den måde. Men du kan angive, om du vil have den største eller mindste:

SELECT ID, VareTekst, VareNummer, MAX(PicPath)
FROM t_VareKartotek
INNER JOIN t_VareKartotekPICS ON ID=VareID
GROUP BY ID, VareTekst, VareNummer
WHERE VareNummer = 99939

Du kan bruge MIN eller MAX.
Avatar billede kjulius Novice
18. april 2006 - 18:55 #2
WHERE skulle have været før GROUP BY:

SELECT ID, VareTekst, VareNummer, MAX(PicPath)
FROM t_VareKartotek
INNER JOIN t_VareKartotekPICS ON ID=VareID
WHERE VareNummer = 99939
GROUP BY ID, VareTekst, VareNummer

Men måske var jeg i det hele taget lidt hurtig der. Faktisk kan du godt angive, hvor mange rækker, du ønsker retur. Hvis du derfor kun selekterer 1 vare ad gangen, kan du også bruge denne her:

SELECT TOP 1 ID, VareTekst, VareNummer, PicPath
FROM t_VareKartotek
INNER JOIN t_VareKartotekPICS ON ID=VareID
WHERE VareNummer = 99939
Avatar billede kxh Nybegynder
18. april 2006 - 19:31 #3
Hej

Det er noget møg, håbede at der var en let løsning, da jeg skal bruge en repeater i ASP.NET til at 'loope' gennem mine data, så er en samlet forespørgsel lettere, men så må jeg lave et felt i VareKartotekPics hvor man kan definere om det er det billede der skal vises,

// Kim
Avatar billede ldanielsen Nybegynder
19. april 2006 - 10:59 #4
Du kan gøre sådan:

SELECT ID, VareTekst, VareNummer, MaxPicPath
FROM t_VareKartotek
INNER JOIN
(SELECT Max(PicPath) AS MaxPicPath, VareID FROM t_VareKartotekPICS GROUP BY VareID) t_TempTable
ON t_VareKartotek.ID = t_TempTable.VareID
WHERE VareNummer = 99939
Avatar billede kxh Nybegynder
19. april 2006 - 12:36 #5
Hej Ida

Tusind tak, det var lige noget jeg kunne bruge, at få det samlet i et select
gør min programmerings opgave meget lettere, så læg et svar så du kan få points.

// Kim
Avatar billede ldanielsen Nybegynder
19. april 2006 - 14:36 #6
Tak for det

fidusen er at lave et inner join på en virtuel tabel, lavet med en select i parentes, og med alias t_TempTable
Avatar billede kjulius Novice
19. april 2006 - 19:37 #7
Hmm.. Hvor er lige forskellen til den første SQL jeg gav dig 18/04-2006 18:55:59?

Hvis der ellers kun er én vare pr. varenummer skulle det vel give samme resultat, eller overser jeg noget. Det er sent, jeg er træt og sulten, så det kan godt tænkes... :-)
Avatar billede ldanielsen Nybegynder
20. april 2006 - 09:55 #8
Næ du har ret, de er ens. Det havde jeg ikke set, jeg havde bildt mig ind at der var hoget i vejen med din løsning ....

kxh kan bruge den han vil, fordelen ved min er at du ikke skal GROUP'e på mange kolonner, fordi grupperingen foregår inden der joines.

I øvrigt har ingen af os tænkt på havd der sker hvis der intet billede er; så kommer varen ikke med. Det skal være et OUTER JOIN:

SELECT ID, VareTekst, VareNummer, MaxPicPath
FROM t_VareKartotek
LEFT OUTER JOIN
(SELECT Max(PicPath) AS MaxPicPath, VareID FROM t_VareKartotekPICS GROUP BY VareID) t_TempTable
ON t_VareKartotek.ID = t_TempTable.VareID


Vil du have nogle point?
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