Kom ihåg mig?
Home Menu

Menu


SQL problem

Ämnesverktyg Visningsalternativ
Oläst 2011-01-15, 17:47 #1
Jines avatar
Jine Jine är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Feb 2005
Inlägg: 1 032
Jine Jine är inte uppkopplad
Har WN som tidsfördriv
Jines avatar
 
Reg.datum: Feb 2005
Inlägg: 1 032
Standard SQL problem

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
Jine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-01-16, 17:16 #2
MMCs avatar
MMC MMC är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jan 2008
Inlägg: 560
MMC MMC är inte uppkopplad
Mycket flitig postare
MMCs avatar
 
Reg.datum: Jan 2008
Inlägg: 560
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.
MMC är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-01-16, 19:07 #3
pelmereds avatar
pelmered pelmered är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: May 2010
Inlägg: 1 342
pelmered pelmered är inte uppkopplad
Har WN som tidsfördriv
pelmereds avatar
 
Reg.datum: May 2010
Inlägg: 1 342
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
pelmered är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 17:02.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017