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
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
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
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
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
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
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, то ознакомьтесь со списком представленным ЗДЕСЬ.
—————————————————
Полезные ссылки:
Урок 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