Avatar billede hmortensen Nybegynder
19. januar 2006 - 14:16 Der er 10 kommentarer og
1 løsning

sql udtryk giver for mange

Hejsa

Jeg har tre tabeller (medlemmer, produkter og interesser).
Medlemmer og produkter indeholder ingen dubletter.
Jeg har så i interesser medlemsnr, varenr og dato.

Jeg ønsker nu at trække alle medlemmer ud, sammen med navnet på den vare de sidst har vist interesse for, men jeg får for alle deres interesser.

Mit udtryk ser sådan her ud indtil videre:
SELECT medlemmer.navn, produkter.navn, interesser.dato
FROM medlemmer
INNER JOIN interesser
    ON interesser.medlemsnr = medlemmer.medlemsnr
INNER JOIN produkter
    ON interesser.varenr = produkter.varenr
ORDER BY interesser.dato DESC

Gætter på at der skal grupperes på en eller anden facon, men hvordan.

Mvh.
H. Mortensen
Avatar billede arne_v Ekspert
19. januar 2006 - 14:28 #1
... AND tid = (SELECT MAX(tid) FROM ... WHERE ...)

vil jeg tro - forudsat nyere MySQL
Avatar billede hmortensen Nybegynder
19. januar 2006 - 14:30 #2
Det er MSSQL.

Og, når jeg sætter det på, får jeg kun ét medlem returneret, med den nyeste interesse.
Avatar billede arne_v Ekspert
19. januar 2006 - 15:55 #3
sorry

saa skal det virke

WHERE betingelsen sub SELECT'en skal teste paa om medlemsnr er det samme
som medlemsnr i hoved SELECT'en

hvis man saetter tabel aliaser paa kan det lade sig goere
Avatar billede arne_v Ekspert
19. januar 2006 - 15:56 #4
alternativt kan du lave en JOIN med:

(SELECT medlemsnr,MAX(tid) AS maxtid FROM ... GROUP BY medlemsnr)
Avatar billede hmortensen Nybegynder
19. januar 2006 - 17:04 #5
Jeg forstår ikke hvordan du vil flette den sidste ind.
Avatar billede arne_v Ekspert
19. januar 2006 - 17:20 #6
Mit udtryk ser sådan her ud indtil videre:
SELECT medlemmer.navn, produkter.navn, interesser.dato
FROM medlemmer
INNER JOIN interesser
    ON interesser.medlemsnr = medlemmer.medlemsnr
INNER JOIN produkter
    ON interesser.varenr = produkter.varenr
INNER JOIN (SELECT ...) x
    ON x.medlemsnr = medlemmer.medlemsnr AND x.maxtid = noget.tid
ORDER BY interesser.dato DESC
Avatar billede hmortensen Nybegynder
19. januar 2006 - 18:10 #7
Så virker den, mange tak for hjælpen.

Tænkte ikke på at man kunne joine på en "temp" tabel.
Avatar billede hmortensen Nybegynder
19. januar 2006 - 18:57 #8
Hov, kan den tilrettes så den giver null i produkt.navn og interesse.dato hvis der ikke findes en interesse for et medlem ?
Avatar billede arne_v Ekspert
19. januar 2006 - 20:02 #9
jeg kan ikke lige se lyset men du kan vel altid UNION's dem ind
Avatar billede hmortensen Nybegynder
19. januar 2006 - 20:09 #10
Laver en komplet medlems liste metode i stedet.

Smider du et svar.
Avatar billede arne_v Ekspert
19. januar 2006 - 20:17 #11
ok
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