Hulp nodig bij query

Status
Niet open voor verdere reacties.

erik loosveldt

Nieuwe gebruiker
Lid geworden
3 jun 2010
Berichten
4
Hallo,

Ik wil een query opstellen in een database die ogenschijnlijk heel eenvoudig is, maar toch een stuk moeilijker blijkt te zijn dan ik dacht. Merk op dat ik aan de structuur van de database niets kan veranderen. Voorstellen voor het opsplitsen of herdefiniëren van de tabellen in de database hebben dus geen zin.

Ik heb de volgende twee tabellen: School en Class. School is met een 1-op-veel link verbonden met Class. Binnenin Class zijn er twee variabelen relevant in deze query: bool1 en bool2. Beide variabelen zijn boolean waarden.

Ik wil nu een selectiequery van alle records in tabClass waarvoor "bool1 = WAAR" en een indicator (Waar/Onwaar) of er voor de bijhorende tabSchool minstens één tabClass is waarvoor "bool2 = Waar".

Ik geef een voorbeeld:

[table="width: 500, class: dotted"][tr][td]Class.ID [/td][td] Class.bool1 [/td][td] Class.bool2 [/td][td] School.ID[/td][/tr]
[tr][td]1 [/td][td] Waar [/td][td] Onwaar [/td][td] 1[/td][/tr]
[tr][td]2 [/td][td] Onwaar [/td][td] Onwaar [/td][td] 1[/td][/tr]
[tr][td]3 [/td][td] Waar [/td][td] Waar [/td][td] 2[/td][/tr]
[tr][td]4 [/td][td] Waar [/td][td] Onwaar [/td][td] 2[/td][/tr][/table]

In het queryresultaat verwacht ik 3 records met Class.ID respectievelijk 1, 3 en 4 omdat daarvan bool1 = WAAR. Voor die drie records verwacht ik respectievelijk Onwaar, Waar, Waar als indicatorvariabele.
Deze waarde is Onwaar bij Class.ID = 1 omdat bij School.ID = 1 geen enkele Class is met bool2 = Waar.
Bij Class.ID = 3 en Class.ID = 4 moet de indicator Waar zijn omdat School 2 minstens één Class bevat (Class 3) waarvoor bool2 = Waar.

Ik heb zelf een query gemaakt waarin de tabel Class 2 keer is toegevoegd en gelinked aan School. Ik gebruik dan één van die tabellen om Min(bool2) te berekenen (met een totaalrij). Ook als is de Min() van een boolean niet echt gedefinieerd, toch heb ik de indruk dat hier Waar (of toch '-1') wordt weergegeven als bool2 in minstens één van de Class records Waar is.

Deze query is natuurlijk niet optimaal. Iemand een voorstel om dit te verbeteren?
 
Ok uitdaging 1 is of ik je punt goed begrijp en uitdaging 2 is of ik de syntax enigzins benader.
Maar zelf dacht ik aan zoiets :

Code:
query1
select school.id as school_id from school inner join class on school.classid=class.id where (((class.bool2)=waar));

query2
select class.id, class.bool1, class.bool2, query1.school_id from class inner join query1 on class.school_id=query2.school_id where (((class.bool1)=waar));

Wellicht dat het je ergens heen leidt.

Succes,

Frank.
 
Laatst bewerkt:
Bij nader inzien :
Code:
Query1
SELECT school.id
FROM class INNER JOIN school ON Class_selectie.school_id = school.id
WHERE (((Class_selectie.bool2)=True));


Query2
SELECT class.id, class.Bool1, class.bool2, class.school_id, IIf(IsNull(Query1.id),"onwaar","waar") AS [indicator]
FROM class LEFT JOIN Query1 ON class.school_id=Query1.id
WHERE (((class.Bool1)=True));
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan