Трудно сказать, чего именно вы хотите - действительно ли это означает, что для любых имен, которые появляются более одного раза, вы хотите показать как имена, так и фамилии всех соответствующих записей?Если это так, вы можете использовать аналитическую функцию, например:
select first_name, last_name
from (
select first_name, last_name,
count() over (partition by first_name) as cnt
)
where cnt > 1;
Внутренний запрос добавляет виртуальный столбец к каждой строке, который показывает, сколько раз имя появляется во всем наборе данных;внешний запрос затем отфильтровывает любые, которые появляются только один раз.В целом это лучше, чем самостоятельное объединение, поскольку вы попадаете в таблицу только один раз.
Если вас интересуют только конкретные фамилии, вы можете добавить фильтр для них (согласно ответу DCookie)на любом уровне, с немного отличающимися результатами - зависит, хотите ли вы, чтобы все фамилии были включены в подсчет, или только определенные в вашем списке.
Конечно, если это домашняя работа, и вы простоИзучая самосоединения, возможно, именно так вы и должны сейчас идти, хотя я не фанат обучения чему-то неоптимальному, если только я не покажу вам, почему это так.Если это домашнее задание, посмотрите, как далеко вы можете пройти, а затем добавьте к вопросу свою попытку, любые ошибки и т. Д.