Не используйте NATURAL JOIN
. Это мерзость, потому что она не учитывает должным образом объявленные отношения внешнего ключа. Он смотрит только на названия столбцов. Это может привести к очень трудно найти ошибки.
Второе, что вам нужно, это агрегация:
select sc.SCHOOL_NAME, t.TOWN, c.COUNTY
from STUDENTS st join
SCHOOLS sc
on st.? = sc.? join
TOWNS t
on t.? = ? join
COUNTIES c
on c.? = t.?
where FIRST_NAME in ('Mick', 'Dave')
group by sc.SCHOOL_NAME, t.TOWN, c.COUNTY
having count(distinct st.first_name) = 2;
?
- это заполнители для имен таблиц и столбцов. Если вы изучаете SQL, тем более важно понимать, как выстраиваются столбцы для объединений в разных таблицах.
Предложение where
может проверять значения только в одной строке. Для каждого учащегося есть отдельная строка, поэтому просто - where
- невозможно найти обоих учеников. Вот где начинается агрегация.