FAQ |
Kalender |
2011-01-15, 18:47 | #1 | |||
|
||||
Har WN som tidsfördriv
|
Lovade en bekant att hjälpa han med ett SQL problem, men det var lite för advancerat för mig.
Någon som kan hjälpa? Vår databas ser ut såhär: http://i53.tinypic.com/34fe53p.jpg Personid är TEXT Vårt svar än så länge: SELECT Person.fnamn, Person.enamn, Person.pnr FROM Person, Anmälan, KursTillfälle, Kurs WHERE Anmälan.ktillfid=Kurstillfälle.ktillfid And Anmälan.personid=Person.personid AND Kurs.kursid=KursTillfälle.kursid AND KursTillfälle.personid='5' AND ((Anmälan.[närvarande Ja/Nej])=-1) AND ((Kurstillfälle.[genomförd Ja/Nej])=-1) ; Problemet är att vi på något sätt måste sortera bort de svar som bara har gått 1 kurs med personid 5, vi vill bara se de som gått ALLA kurser som personid 5 har hållit. Vi använder oss av Access Frågan ser ut såhär: Vilka personer har deltagit i ALLA kurser som kursledare personid=5 har hållit? Kurserna måste vara genomförd = Ja Anmälan till kurserna måste vara Närvarande = Ja Personerna i svaret måste ha gått kurserna för just den valda kursledaren, det vill säga om kurserna hållits vid flera tillfällen men av olika kursledare måste han ha gått kursen för bara personid=5 Svaret ska visa fnamn, enamn, pnr på personerna som delatig i kurserna med ovanstående villkor. Tack på förhand //Jine |
|||
Svara med citat |
2011-01-16, 18:16 | #2 | |||
|
||||
Mycket flitig postare
|
Jag har inte koll på Access, men jag föreslår att du gör en subquery där du plockar fram alla personer som gått någon kurs som person 5 hållit och en COUNT() på hur många kurser varje person har gått. Sen gör du bara en SELECT FROM (subquery här) WHERE antal_kurser == kurser_som_hållits.
|
|||
Svara med citat |
2011-01-16, 20:07 | #3 | |||
|
||||
Har WN som tidsfördriv
|
Vet inte heller hur det fungerar med access.
Men något sånt här skulle nog funkar i MySQL: SELECT Person.fnamn, Person.enamn, Person.pnr FROM KursTillfälle INNER JOIN Anmälan ON Anmälan.ktillfid = KursTillfälle.ktillfid INNER JOIN Person ON Person.personid = Anmälan.personid WHERE KursTillfälle.personid = 5 AND (SELECT COUNT(*) FROM Anmälan WHERE Anmälan.personid = Person.Personid)) = (SELECT COUNT(*) FROM KursTillfälle WHERE KursTillfälle.personid = 5) AND KursTillfälle.genomförd = 'Ja' AND Anmälan.närvarande = 'Ja' Den andra subqueryn går att ta bort om man vet hur många kurser som personen har hållit. Det går säkert att optimera den en del också, men det kanske inte är det viktigaste Edit: Stor chans att det blivit något fel, jag skrev allt direkt ut huvudet utifrån din databasmodell |
|||
Svara med citat |
Svara |
|
|