Справка по SQL-запросу: извлечение всех строк с одинаковыми именами и фамилиями, соответствующими определенному списку - PullRequest
0 голосов
/ 03 марта 2012

Дизайн стола:

First_Name Last_name

Есть несколько записей, которые имеют одинаковые имена, но разные фамилии. Мне нужно найти все записи, которые имеют одинаковое имя и определенный список фамилии.

Например:

First_Name Last_name
John       Pohn
John       Qohn
John       Rohn
Jack       Rohn
Jack       Pohn
Sam        Pohn
Sam        Rohn
Sam        Qohn

Фамилия: Pohn and Qohn

Таким образом, мой запрос должен выбирать только эти записи

John Pohn
John Qohn
Sam  Pohn
Sam Qohn

1 Ответ

3 голосов
/ 03 марта 2012

Трудно сказать, чего именно вы хотите - действительно ли это означает, что для любых имен, которые появляются более одного раза, вы хотите показать как имена, так и фамилии всех соответствующих записей?Если это так, вы можете использовать аналитическую функцию, например:

select first_name, last_name
from (
    select first_name, last_name,
        count() over (partition by first_name) as cnt
)
where cnt > 1;

Внутренний запрос добавляет виртуальный столбец к каждой строке, который показывает, сколько раз имя появляется во всем наборе данных;внешний запрос затем отфильтровывает любые, которые появляются только один раз.В целом это лучше, чем самостоятельное объединение, поскольку вы попадаете в таблицу только один раз.

Если вас интересуют только конкретные фамилии, вы можете добавить фильтр для них (согласно ответу DCookie)на любом уровне, с немного отличающимися результатами - зависит, хотите ли вы, чтобы все фамилии были включены в подсчет, или только определенные в вашем списке.


Конечно, если это домашняя работа, и вы простоИзучая самосоединения, возможно, именно так вы и должны сейчас идти, хотя я не фанат обучения чему-то неоптимальному, если только я не покажу вам, почему это так.Если это домашнее задание, посмотрите, как далеко вы можете пройти, а затем добавьте к вопросу свою попытку, любые ошибки и т. Д.

...