Avatar billede nih Novice
26. november 2006 - 19:21 Der er 5 kommentarer og
1 løsning

Forespørgsel i en 'mange til mange' relation

Hej

Jeg har en tabel med personer og en tabel med engagement de begge relatereret til en tredje tabel: klubengagement med felterne: PersId, EngagementId, status(ja/nej) og en dato.

Jeg vil gerne have en SQL der viser alle personernes status som 'medlem' efter sidste ændring.
EKS.
persId    EngId    dato    status
Jesper    træner    01-01-2001    Ja
Niels    medlem    01-01-2001    Nej
Jesper    medlem    01-01-2000    Ja
Niels    medlem    01-01-2000    Ja

Jeg har bøvlet hele dagen - så please lad det ikke være for nemt :)

Niels
Avatar billede ramad Praktikant
26. november 2006 - 19:25 #1
kan du evt. give et eksempel på data i de 2 første tabeller?
Avatar billede nih Novice
26. november 2006 - 19:30 #2
Jeg har sådan set lavet strukturen om så det er nok med den ene jeg har vist.

jeg vil 'bare have et udtræk der viser:
persId    EngId    dato    status
Jesper    medlem    01-01-2000    Ja
Niels    medlem    01-01-2001    Nej

posten
Niels    medlem    01-01-2000    Ja
Skal IKKE med fordi datoen er mindre end 01-01-2001

Niels
Avatar billede ramad Praktikant
26. november 2006 - 22:47 #3
Hejsa igen - der var lige lidt huslige pligter og en film, men nu fik jeg lige lidt tid igen :)

Kan du evt. bruge følgende, der gør brug af en temp tabel?
Jeg har kaldt min tabel for Eksperten_Mange_Til_Mange_Relation, så det skal jo lige erstattes :)

CREATE TABLE #PersId_Temp(PersId nvarchar(10), dato datetime)

INSERT INTO #PersId_Temp
SELECT PersID, max(dato)
FROM Eksperten_Mange_Til_Mange_Relation
WHERE EngId = 'medlem'
GROUP BY PersID

SELECT  a.PersId, a.EngId, a.dato, a.status
FROM Eksperten_Mange_Til_Mange_Relation a
    JOIN #PersId_Temp b
    ON a.PersId = b.PersId
WHERE a.dato = b.dato

DROP TABLE #PersId_Temp
Avatar billede nih Novice
26. november 2006 - 23:02 #4
Hej - var det swordfish du så - den er god.

Din løsning - den opfylder kriteriet :)

Jeg havde dog håbet på én forespørgsel.

Niels
Avatar billede nih Novice
26. november 2006 - 23:12 #5
Hey, nu er den der :)

SubQry:
SELECT persId,EngId, Max(dato) AS MaksOfdato
FROM klubengagement
GROUP BY persId,EngId;

MainQry
SELECT klubengagement.*
FROM klubengagement INNER JOIN subQry ON (klubengagement.persId = subQry.persId) AND (klubengagement.EngId = subQry.EngId) AND (klubengagement.dato = subQry.MaksOfdato)
WHERE (((klubengagement.EngId)="medlem") AND ((klubengagement.status)=Yes));

ramad-> Du hjalp mig fint på sporet med den tempTable - så hvis du ligger et svar vil du få dine fortjente point.

Niels
Avatar billede ramad Praktikant
27. november 2006 - 00:33 #6
Hejsa - nej det var kæresten der bestemte, så det blev Bridget Jones :(
Jeg ligger lige et svar, og så lærte jeg også selv noget fra nih's svar...
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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