Hoi medetweakers,
Op het moment zijn wij bij mijn cursus aangekomen bij het gebruiken van subselects. De opgaven die ik moest doen, moeten dus ook opgelost worden met alleen (sub)selects. Geen joins/unions e.d.
Ik dus overijverig aan het werk en alles is in principe gelukt, behalve deze laatste hersenkraker. Ik heb google afgeplozen uiteraard samen met de handige instructietopic van dit forum, maar heb niet het uiteindelijke antwoord gevonden. Ik hoop nu dat jullie tot mijn redding kunnen komen.
De opgave is als volgt:
'geef het soortnummer(snr) en de nederlandse soortnaam(nsnaam) van die soorten die uitsluitend vis als voedsel hebben.'
Koppeling is als volgt:
snr/snaam zijn columns van soort
snr/voednr zijn columns van dieet
voedsoort/voednr zijn columns van voedsel
Mijn query:
SELECT IFNULL(snr,0) , snaam) FROM soort WHERE snr IN -- om eventule nulwaardes eruit te filteren, ifnull gedaan.
( SELECT snr FROM dieet WHERE voednr IN
( SELECT voednr FROM voedsel WHERE voedselsoort = 'vis' AND snr = -- hierna gaat het dus fout
( SELECT count(snr) = 1 FROM dieet)));
Ik ben tot het volgende gekomen met de volgende logica:
Eindresultaat moet van soort zijn;
Soort moet je koppelen aan dieet om bij voedsel te komen;
In dieet kan je kijken hoeveel verschillende soorten voedsel elke soort eet. Hier dien je dus te filteren naar dat het soort maar 1 soort voedsel eet (vis.)
In voedsel dien je uiteindelijk het resultaat te filteren naar vis.
Omdat dieet eerder komt dan voedsel, heb ik nog een laatste subselect gedaan terug naar dieet omdat je eerst moet filteren naar aantal verschillende soorten voedsel voordat je de 'vis' selectie kan doen, anders klopt de output niet.
Ik moet de count in de laatstse subselect gelijkstellen aan 1, omdat het maar een soort voedsel mag eten. Deze moet vervolgens doorgegeven worden aan de volgende subselect, alleen dat gebeurt niet. Ik krijg namelijk helemaal geen output meer. Als ik die laatste subselect weglaat, dan krijg ik er 7. Moeten er 3 zijn.
Op het moment zijn wij bij mijn cursus aangekomen bij het gebruiken van subselects. De opgaven die ik moest doen, moeten dus ook opgelost worden met alleen (sub)selects. Geen joins/unions e.d.
Ik dus overijverig aan het werk en alles is in principe gelukt, behalve deze laatste hersenkraker. Ik heb google afgeplozen uiteraard samen met de handige instructietopic van dit forum, maar heb niet het uiteindelijke antwoord gevonden. Ik hoop nu dat jullie tot mijn redding kunnen komen.
De opgave is als volgt:
'geef het soortnummer(snr) en de nederlandse soortnaam(nsnaam) van die soorten die uitsluitend vis als voedsel hebben.'
Koppeling is als volgt:
snr/snaam zijn columns van soort
snr/voednr zijn columns van dieet
voedsoort/voednr zijn columns van voedsel
Mijn query:
SELECT IFNULL(snr,0) , snaam) FROM soort WHERE snr IN -- om eventule nulwaardes eruit te filteren, ifnull gedaan.
( SELECT snr FROM dieet WHERE voednr IN
( SELECT voednr FROM voedsel WHERE voedselsoort = 'vis' AND snr = -- hierna gaat het dus fout
( SELECT count(snr) = 1 FROM dieet)));
Ik ben tot het volgende gekomen met de volgende logica:
Eindresultaat moet van soort zijn;
Soort moet je koppelen aan dieet om bij voedsel te komen;
In dieet kan je kijken hoeveel verschillende soorten voedsel elke soort eet. Hier dien je dus te filteren naar dat het soort maar 1 soort voedsel eet (vis.)
In voedsel dien je uiteindelijk het resultaat te filteren naar vis.
Omdat dieet eerder komt dan voedsel, heb ik nog een laatste subselect gedaan terug naar dieet omdat je eerst moet filteren naar aantal verschillende soorten voedsel voordat je de 'vis' selectie kan doen, anders klopt de output niet.
Ik moet de count in de laatstse subselect gelijkstellen aan 1, omdat het maar een soort voedsel mag eten. Deze moet vervolgens doorgegeven worden aan de volgende subselect, alleen dat gebeurt niet. Ik krijg namelijk helemaal geen output meer. Als ik die laatste subselect weglaat, dan krijg ik er 7. Moeten er 3 zijn.
[ Voor 4% gewijzigd door Chrotenise op 09-12-2012 00:58 ]