Mijn database ziet er als volgt uit:

Er kunnen wat foutjes inzitten, het is nog volop in ontwikkeling.
Toelichting:
De database is voor een basisschool. Elk jaar is er een andere samenstelling van groepen. De groepen voor een schooljaar worden bijgehouden in de koppeltabel koppel_jaargroepen. In de andere koppeltabel koppel_jaargroepengebruikers wordt bijgehouden welke gebruiker (docent) dan bij zo'n combinatie van schooljaar en groep hoort.
De database wordt op een website gebruikt. Op een van die pagina's van die website wil ik uit de database het volgende ophalen:
Alle groepen voor een schooljaar die voor een gebruiker nog niet zijn opgenomen in de koppeltabel koppel_jaargroepengebruikers
Om alle groepen op te halen die al wél zijn opgenomen gebruik ik de volgende query:
Om het wel te veranderen in niet en zodoende aan mijn eigen vraag te voldoen zou ik gebruik kunnen maken van het volgende:
Nu worden alle groepen getoond die voor een gebruiker nog niet zijn gekoppeld.
Het probleem is dat ik deze subquery niet kan gebruiken omdat dat MySQL 4.0 dit nog niet ondersteund. 4.1 wel, maar dat wordt (nog) niet gebruikt door de hostingprovider. Ik zal dus de query moeten herschrijven zodat er geen subquery meer gebruikt wordt.
De manier om dat te doen is mbv JOIN. Helaas kom ik daar niet helemaal uit. Ik dacht: laat ik het stap voor stap aanpakken en dan de eerste query (de wel-query) herschrijven en dan later die veranderen zodat die voldoet aan wat ik wil bereiken.
Uiteindelijk heb ik er dit van gebakken:
En dat werkt
Maar bij de volgende stap lukt het mij niet meer. Hoe moet ik hier de niet-query van maken mbv JOIN? Ik heb van alles geprobeerd met FULL OUTER JOIN en LEFT OUTER JOIN etc. maar wat eigenlijk echt goed lukt is het genereren van syntax errors of de meest vreemde resultaten
Hoe schrijf ik nu de subquery om? Een eenvoudige subquery lukt mij nog wel, maar dit gaat mij even iets boven m'n pet

Er kunnen wat foutjes inzitten, het is nog volop in ontwikkeling.
Toelichting:
De database is voor een basisschool. Elk jaar is er een andere samenstelling van groepen. De groepen voor een schooljaar worden bijgehouden in de koppeltabel koppel_jaargroepen. In de andere koppeltabel koppel_jaargroepengebruikers wordt bijgehouden welke gebruiker (docent) dan bij zo'n combinatie van schooljaar en groep hoort.
De database wordt op een website gebruikt. Op een van die pagina's van die website wil ik uit de database het volgende ophalen:
Alle groepen voor een schooljaar die voor een gebruiker nog niet zijn opgenomen in de koppeltabel koppel_jaargroepengebruikers
Om alle groepen op te halen die al wél zijn opgenomen gebruik ik de volgende query:
code:
1
2
3
4
5
6
| SELECT groepen.naam
FROM koppel_jaargroepengebruikers, koppel_jaargroepen, groepen
WHERE koppel_jaargroepengebruikers.gebruiker_id = '$gebruiker_id'
AND koppel_jaargroepengebruikers.jaargroep_id = koppel_jaargroepen.id
AND koppel_jaargroepen.schooljaar_naam = '$schooljaar'
AND koppel_jaargroepen.groep_id = groepen.id |
Om het wel te veranderen in niet en zodoende aan mijn eigen vraag te voldoen zou ik gebruik kunnen maken van het volgende:
code:
1
2
3
4
5
6
7
8
9
| SELECT groepen.naam
FROM groepen
WHERE NOT IN
(SELECT groepen.naam
FROM koppel_jaargroepengebruikers, koppel_jaargroepen, groepen
WHERE koppel_jaargroepengebruikers.gebruiker_id = '$gebruiker_id'
AND koppel_jaargroepengebruikers.jaargroep_id = koppel_jaargroepen.id
AND koppel_jaargroepen.schooljaar_naam = '$schooljaar'
AND koppel_jaargroepen.groep_id = groepen.id) |
Nu worden alle groepen getoond die voor een gebruiker nog niet zijn gekoppeld.
Het probleem is dat ik deze subquery niet kan gebruiken omdat dat MySQL 4.0 dit nog niet ondersteund. 4.1 wel, maar dat wordt (nog) niet gebruikt door de hostingprovider. Ik zal dus de query moeten herschrijven zodat er geen subquery meer gebruikt wordt.
De manier om dat te doen is mbv JOIN. Helaas kom ik daar niet helemaal uit. Ik dacht: laat ik het stap voor stap aanpakken en dan de eerste query (de wel-query) herschrijven en dan later die veranderen zodat die voldoet aan wat ik wil bereiken.
Uiteindelijk heb ik er dit van gebakken:
code:
1
2
3
4
5
6
| SELECT groepen.naam
FROM koppel_jaargroepengebruikers
INNER JOIN koppel_jaargroepen ON ( jaargroep_id = koppel_jaargroepen.id )
INNER JOIN groepen ON ( groep_id = groepen.id )
WHERE schooljaar_naam = '$schooljaar'
AND gebruiker_id = '$gebruiker_id' |
En dat werkt
Maar bij de volgende stap lukt het mij niet meer. Hoe moet ik hier de niet-query van maken mbv JOIN? Ik heb van alles geprobeerd met FULL OUTER JOIN en LEFT OUTER JOIN etc. maar wat eigenlijk echt goed lukt is het genereren van syntax errors of de meest vreemde resultaten
Hoe schrijf ik nu de subquery om? Een eenvoudige subquery lukt mij nog wel, maar dit gaat mij even iets boven m'n pet
[ Voor 7% gewijzigd door Priet op 04-04-2004 12:27 . Reden: Jointjes eruit gehaald :p ]
"If you see a light at the end of a wormhole, it's probably a photon torpedo!"