1.
I don't really get what you want your data structure to represent, but assuming things are as they should be, I'm guessing what you want is
SELECT
[fields]
FROM
child c
INNER JOIN child_fosterhome cf ON cf.child_id = c.id
INNER JOIN child_carelevel cc ON cc.child_id = c.id
LEFT JOIN assignment_note an ON an.carelevel_id = cc.id AND an.fosterhome_id = cf.id
AND an.date_of_report='2011-04-01'
- Is it perhaps simply a matter of being on a case sensitive MySql / OS combination (i.e. non-windows)? Sometimes you call an identifier 'id', other places reference the same identifier as ID.
Wether this is the actual problem or not I recommend that you stick to lowercase letters and use underscores rather than camel casing when it comes to MySQL since it's case sensitive on some systems but not others. Should you ever move your db from Windows to another OS you risk having your code suddenly break for no good reason.
You should probably also note that you reference b.Children_ID twice in the where clause. Should the second one be table c?
And here are my thoughts about your schema. It's entirely possible that I've missunderstood things since I don't have a working knowledge of what you are doing. So read and consider this, or disregard it entirely. It's up to you 🙂
What's id? And what's Fosterhomes_ID? Assuming this is a link table between child and fosterhome, there is no reason for the separate id named 'id' since: PRIMARY KEY (child_id, fosterhome_id) does the trick just fine and you don't really need to automatically generate keys in this table.
But perhaps more importantly, can a child really live in several fosterhomes? Else, why not just have a fosterhome_id in the Child table?
Can there be different carelevels for one single child? Else, the exact same reasoning applies here. I.e. remove link table, put carelevel in child table.
Does the assignment note regard only the fosterhome, or does it regard the fosterhome for one specific child? If it's the latter, you should have the child_id as part of the PK. Also, unless the child can live in more than one fosterhome at the same time, this means you can drop the fosterhome_id from the PK.
Unless one child can have several carelevels in place at the same time, there is no need for carelevel to be part of the PK either.