Я бы сделал это, посмотрев на максимальный возраст:
SELECT `group`
FROM groups
GROUP BY `group`
HAVING MAX(age) <= 17;
Примечание. Предполагается, что age
никогда не будет NULL
.Если это возможно, вы должны объяснить, какую логику вы хотите обработать NULL
значениями.
Я также должен отметить, что в большинстве подобных случаев у вас будет отдельная таблица групп.Если это так, то, вероятно, наиболее эффективным решением является not exists
:
select g.*
from groups g
where not exists (select 1
from groupmembers gm
where gm.groupid = g.groupid and
gm.age > 17
);
Преимущество этого состоит в том, что все группы, отвечающие указанным вами условиям, даже не имеют членов.