SELECT u.*, COUNT(c.has_child) as sum, SUM(c.has_child) as sum2 FROM users as u LEFT JOIN children as c ON (c.user_id = u.id) GROUP BY c.user_id HAVING (sum = 0 OR sum2 = 0)
Скорость работы будет скорее всего печальная.
Смотря какое приложение, если важны данные сиюминутные, то придется бороться с запросами такими вот.
Если обновление данные не сильно критично, то можно в таблице добавить поле is_grandpa и это поле по крону раз в минуту обновлять либо как обновляли ранее, либо моим запросом выше. И запрос на выборку упростится до смешного )