Vastus: Andmebaasi kontseptuaalne struktuur on antud juhul järgmine.[Külaline]-1----------------0..*-[Reserveerimine]
Võimalik ülesande lahendus on selline.
SELECT Külaline.külalise_nr, Külaline.perenimi
FROM Külaline
WHERE Külaline.külalise_nr NOT IN
(SELECT Reserveerimine.külalise_nr FROM Reserveerimine
WHERE Year(Reserveerimine.alguse_aeg) = 2014);
SQLis me töötame hulkadega. Oletame näiteks, et teete fotosid ja peate valima, milliseid tahate säilitada. On kaks fotode hulka - need mida säilitada ja need mida mitte. Säilitatavaid fotosid võib hakata ükshaaval välja valima. Kuid mõnikord võib lihtsam olla vaadata kõik fotod üle ja visata ära need, mis ei tulnud kindlasti välja. Kõik allesjäänud fotod kuuluvad säilitamisele. Nii ka siin - alampäringuga leian kõik külalised, kellel on mõni reserveerimine 2014. aastal alanud. Põhipäringuga leian kõik ülejäänud külalised. Nende hulka kuuluvad nii külalised, kellel pole üldse reserveeringuid kui ka need, kelle kõik reserveeringud on alanud muul ajal kui 2014. aastal.
Siit tuleb välja üks üldine probleemide lahendamise strateegia (SQLis ja mujal). Kui tahan leida mingitele tingimusele vastavad olemid või seosed, siis otsin kõigepealt kõiki neid, mis minu tingimustele ei vasta ja siis leian kõik ülejäänud seda tüüpi olemid või seosed - need ongi need, mida otsin.