SQL - поиск пар повторяющихся записей
Не могли бы вы помочь мне с одним запросом SQL?
Стол: студенты
Id | Имя | Дата рождения 1 завещание 1991-02-10 2 Джеймс 1981-01-20 3 Сам 1991-02-10
Мне нужно найти пары студентов, которые имеют одинаковую дату рождения. Однако мы не можем использовать GROUP BY, поэтому простая группировка и подсчет записей не является решением.
Я пытался сделать это с JOIN, но безуспешно.
Ваша помощь очень ценится!
3 ответа
Вы можете использовать самостоятельное соединение на столе, присоединяясь к date_of_birth
колонка:
select s1.name,
s2.name
from students s1
join students s2
on s1.date_of_birth = s2.date_of_birth
and s1.name < s2.name;
Как wildplasser и dasblinkenlight указал на <
оператор (или >
) лучше чем <>
потому что при использовании <>
в состоянии соединения комбинация Will/Sam будет сообщена дважды.
Другой способ удалить дубликаты этих дубликатов - использовать отдельный запрос:
select distinct greatest(s1.name, s2.name), least(s1.name, s2.name)
from students s1
join students s2
on s1.date_of_birth = s2.date_of_birth
and s1.name <> s2.name;
(хотя устранение дубликатов в условии соединения почти наверняка более эффективно)
Этот запрос сообщает обо всех студентах, у которых есть неуникальная дата рождения.
SELECT *
FROM students s
WHERE EXISTS (
SELECT *
FROM students ex
WHERE ex.dob = st.dob
AND ex.name <> st.name
)
ORDER BY dob
;
select st.name, stu.name
from students st, students stu
where st.date_of_birth = stu.date_of_birth AND and st.name <> stu.name;