Как найти однофамильцев в таблице

You have a table with 4 columns:

Primary key / name / surname / middle name

How to write Sql query to find people who has same family name?

1 / Ivan / Ivanov / Ivanovich

2 / Petr / Levinsky / Aleksandrovich

3 / Alex / Ivanov / albertovich

Should return Ivan and Alex

Thanks

asked Apr 29, 2011 at 8:41

VextoR's user avatar

In standard SQL you can simply join the table with itself:

select a.name, b.name
from t as a, t as b
where a.surname = b.surname and a.id < b.id

where t is your table and id is the primary key column.

This returns all distinct pairs of first names for every surname that has multiple entries.

You might want to add surname to the list of selected columns.

answered Apr 29, 2011 at 8:45

NPE's user avatar

NPENPE

483k107 gold badges943 silver badges1008 bronze badges

1

If you want to find exactly names then you should firstly find all surnames that appear more than once and the find all names:

select name
  from t
  where surname in (select surname from t group by surname having count(surname) > 1);

answered Apr 29, 2011 at 8:47

andr's user avatar

andrandr

1,6168 silver badges10 bronze badges

0

As for me easiest way is to group records by surname and then select those with count more than 1.

answered Apr 29, 2011 at 8:46

DixonD's user avatar

DixonDDixonD

6,5075 gold badges31 silver badges51 bronze badges

You want to GROUP BY the surname and then use a HAVING clause to find any groups that have > 1.

Untested:

SELECT 
  name 
FROM 
  theTable 
WHERE Surname IN (
    SELECT
      Surname
    FROM
      theTable
    GROUP BY
      Surname
    HAVING
      COUNT(Surname) > 1)

answered Apr 29, 2011 at 8:45

Fermin's user avatar

FerminFermin

34.8k21 gold badges81 silver badges128 bronze badges

2

select surname,group_concat(firstname)
from people
group by surname
having count(firstname)> 1;

answered Apr 29, 2011 at 8:46

ADW's user avatar

ADWADW

4,02017 silver badges13 bronze badges

mobile, я попробовала,как Вы и говорили,в данные для поля Количество написала:
=DCount(“*”;”Космонавты”;”Фамилия='” & [фамилия] & “‘”), где Космонавты – таблица,откуда нужно взять данные.Всегда выводит число 873, да ещё и не меняется для каждого!Я у же подумывала,что какой-то макрос после обновления следует поставить…
потом я пошла в справку,где написано:
DCount(вираз, домен [, критерій] )
вираз :Вираз, що визначає поле, для якого слід підрахувати кількість записів. Це може бути рядковий вираз, що визначає поле в таблиці або запиті, або вираз, який виконує обчислення даних у цьому полі. Аргумент вираз може містити ім’я поля в таблиці, елемента керування у формі, константи або функції.
А у нас это просто “*”.Поэтому я подумала поменять это на имя поля.Получилось:
=DCount(“[Фамилия, имя отчество]”;”Космонавты”;”Фамилия='” & [фамилия] & “‘”)
но с этим вообще ошибку выдает…так и пишет в поле количество #Ошибка
Помогите,что я делаю не так??

Добавлено через 22 минуты
zikmik,

Цитата
Сообщение от zikmik
Посмотреть сообщение

в запросе выведите еще раз поле имя и фамилия и введите групповую операцию , в первом поле поставьте группировку, а во втором count . поле формы в области данных в закладке данные выберите из списка то поле запроса, в котором count.

так ,а теперь всё по порядку…
у меня не несколько полей,а одно. Как вы и сказали,я поставила на поле ФИО условие :Like ([Forms]![название вашей формы]![Поле0] & “*”).
а куда теперь группировку и Count ставить??

Александр Сергеевич



Знаток

(474),
закрыт



12 лет назад

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

Дополнен 12 лет назад

Фамилия не известна. Необходимо вывести данные тех у кого одинаковые фамилии

QAZWSX azxs

Гуру

(2886)


12 лет назад

select * from people group by surname having count(surname)>1;

мне кажется мой вариант наиболее простой и оптимальный, потому что следующий вариант говорит не только про фамилии а про одинаковые записи

A1EX@NdER

Знаток

(370)


12 лет назад

Всем Спасибо большое! Вот получился рабочий код:
Select *
from Читатели
Where Фамилия = (select Фамилия
from Читатели
group by Фамилия
having count(*)>1)

У меня есть таблица Empl, в которой есть поле LastName. Как мне вывести записи, у которых это поле не уникально (т.е. всех однофамильцев)?

Ответы (5 шт):

Тупо в лоб

select distinct * from empl where lastname in(  
  select t1.lastname from empl t1, empl t2  
  where t1.lastname=t2.lastname and not t1.id=t2.id
) t;

→ Ссылка

Автор решения: knes

select `e1`.* from `Empl` as `e1`, (select `LastName` from `Empl` group by `LastName` having count(*)>1) as `e2` where `e1`.`LastName`=`e2`.`LastName`

На собеседованиях любят такие давать.
upd: пардон, запятую забыл

→ Ссылка

Автор решения: msi

select * from Empl
where LastName in(
select lastname from empl group by lastname having count(*) > 1)

→ Ссылка

Автор решения: 0xdb

На большинстве СУБД доступен станадртный запрос с аналитической функцией COUNT:

with t as (
    select e.*, count(*) over(partition by LastName) as num
    from Empl e)
select * from t where num>1

Классика с корреляционным подзапросом в операторе EXISTS:

select e1.*
from Empl e1
where exists (
    select null 
    from Empl e2 
    where e2.LastName = e1.LastName and e2.id != e1.id)

db<>fiddle.

→ Ссылка

Всем привет. Продолжаем изучать программу Microsoft Access. В этой статье расскажу как произвести Поиск повторяющихся записей с помощью запроса Access. Создав такой запрос в Microsoft Access, можно без труда отыскать дубликаты значений в базе данных. Убедитесь, что программа Microsoft Access очень проста и не требует дополнительных знаний в освоении.

Поиск повторяющихся записей с помощью запроса Access

Чтобы выполнить поиск повторяющихся записей с помощью запроса Access воспользуемся мастером запросов. Перейдем на вкладку «Создание» — пункт «Мастер запросов».

Поиск повторяющихся записей с помощью запроса Access

Далее выбираем пункт «Повторяющиеся записи».

Поиск повторяющихся записей с помощью запроса Access

Мы можем произвести поиск повторяющихся записей с помощью запроса Access в таблицах или в запросах. Давайте выберем таблицу «Клиенты».

Поиск повторяющихся записей с помощью запроса Access

Предположим нам надо найти всех однофамильцев из таблицы «Клиенты». Выбираем поле «Фамилия». Далее.

Поиск повторяющихся записей с помощью запроса Access

Здесь мы указываем какие еще поля нужно выводить помимо поле «Фамилия». Выбираем поля: «Имя», «Отчество», «Адрес» и «Телефон».

Поиск повторяющихся записей с помощью запроса Access

Оставляем имя запроса по умолчанию, нажимаем «готово» и смотрим как работает поиск повторяющихся записей с помощью запроса Access.

Поиск повторяющихся записей с помощью запроса Access

Поиск повторяющихся записей с помощью запроса Access

Поиск повторяющихся записей с помощью запроса Access

Поиск повторяющихся записей с помощью запроса Access

Рассмотрим второй пример. Создадим простой запрос на выборку.

Поиск повторяющихся записей с помощью запроса Access

Запустим данный запрос. У нас выводится информация по всем покупкам всех клиентов.

Поиск повторяющихся записей с помощью запроса Access

Теперь снова запустим мастер запросов и посмотрим как работает поиск повторяющихся записей с помощью запроса Access.
В мастере запросов выбираем ранее созданный запрос.

Поиск повторяющихся записей с помощью запроса Access

В качестве полей-повторов выбираем: «Фамилия», «Имя», «Модель». В качестве дополнительных полей выбираем все оставшиеся поля запроса.

Поиск повторяющихся записей с помощью запроса Access

Поиск повторяющихся записей с помощью запроса Access

У нас выводится список клиентов, которые в разное время покупали один и тот же товар.

Поиск повторяющихся записей с помощью запроса Access

Мы рассмотрели как работает поиск повторяющихся записей с помощью запроса Access.

Если вы хотите узнать, как можно найти однофамильцев в базе Access вторым способом, то переходите по ссылке ЗДЕСЬ.

Поиск повторяющихся записей с помощью запроса Access

Если вам нужна готовая база данных Access, то ознакомьтесь со списком представленным ЗДЕСЬ.
—————————————————
Полезные ссылки:
Урок 17: мастер запросов — https://youtu.be/y4eSYCDQ7Wk
Урок 16: запрос на создание таблицы — https://youtu.be/uTxe-abWpNc
Урок 15: запросы с параметром — https://youtu.be/aPJFz22JQHo
Урок 14: запросы с вычисляемыми полями — https://youtu.be/3ha9T_0A4r0
Урок 13: Как определить ГОД, КВАРТАЛ, МЕСЯЦ, ДЕНЬ НЕДЕЛИ в запросе — https://youtu.be/vyp_J49atQQ
Урок 12: Как создать ЗАПРОС С УСЛОВИЕМ — https://youtu.be/bJx78u5wzC8
Урок 11: Как задать условия для ТЕКСТОВЫХ полей в запросах — https://youtu.be/cwbXCFuKdIM
Уроки по SQL-запросам: https://www.youtube.com/playlist?list=PLnzEVwX9gt1jga-65dEwhnjdGS1ZL42MJ

Добавить комментарий