[SQL] Records waar ID /niet/ voorkomt in ander result

Pagina: 1
Acties:

  • Sijmen
  • Registratie: November 2004
  • Laatst online: 01-10-2025
Sorry voor het wat onduidelijk topictitel, maar meet kon ik er echt niet van maken. Met de search en google kwam ik er niet uit (heb ook niet echt een idee welke keywords ik zou moeten gebruiken).

Ik heb de volgende database:
Afbeeldingslocatie: http://img202.exs.cx/img202/6559/database6qe.gif

Als gegevens heb ik $niveau, welke een NiveauID is, en $leerling, welke een LeerlingID is.

Nu wil ik alle opdrachten uit de database halen van het huidige niveau (dat lukt), maar niet als er een uitzondering is gemaakt voor de leerling (als er dus een matchende entry is in LeerlingNietOpdrachten).

Nu heb ik dit:
code:
1
2
3
4
5
SELECT *
FROM Niveaus, Opdrachten
WHERE 
Niveaus.NiveauID = $niveau AND
Opdrachten.NiveauID = Niveaus.NiveauID


Ik snap best hoe ik het zou kunnen uitbreiden met de mogelijkheid om de opdrachten er juist wel in op zou nemen:
code:
1
2
3
4
5
6
7
SELECT *
FROM Niveaus, Opdrachten
WHERE 
Niveaus.NiveauID = $niveau AND
Opdrachten.NiveauID = Niveaus.NiveauID AND
LeerlingNietOpdrachten.LeerlingID = $leerling AND
LeerlingNietOpdrachten.OpdrachtID = Opdrachten.OpdrachtID


Het probleem is dat ik dat juist niet wil. Ik wil alleen de resultaten waarin die match niet voorkomt. Ik neem aan dat ik dat met een vorm van join zou moeten doen, maar van de beschrijving in de FAQ werd ik niet heel veel wijzer.

Dus, hoe filter ik de matchende entries uit LeerlingNietOpdrachten uit de (eerste) query?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Als je geen mysql lager dan 4.1.x gebruikt, kan je dat met een subquery doen:
SELECT ...
FROM ..., opdrachten o
WHERE o.OpdrachtID NOT IN (SELECT lno.OpdrachtID FROM Leerling... lno WHERE LeerlingID = $leerling)
AND ...

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Welke DBMS gebruik je? MySQL? Welke versie?

Ieder DBMS heeft zn eigen dialect van SQL en in het geval van MySQL < versie 4.1 zelfs een beperkt dialect.

  • Sijmen
  • Registratie: November 2004
  • Laatst online: 01-10-2025
Sorry, helemaal vergeten te vermelden. Ik gebruik Access, en op het moment heb ik geen andere mogelijkheden.

Hartelijk dank voor de replies tot nu toe!

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
In dat geval moet je met het voorbeeld van ACM verder kunnen en horen we het wel als je er niet uitkomt.

  • Sijmen
  • Registratie: November 2004
  • Laatst online: 01-10-2025
Het is op die manier gelukt, heel erg bedankt allemaal!

maar die foutmeldingen van Access zijn niet te begrijpen ;)
Pagina: 1