找到成对的重复条目

时间:2014-02-23 12:39:50

标签: sql group-by duplicates

你能帮我解决一个SQL查询吗?

表:学生

Id | Name | Date of birth
1    Will   1991-02-10
2    James  1981-01-20
3    Sam    1991-02-10

我需要找到一对具有相同出生日期的学生。但是,我们不允许使用GROUP BY ,因此只是分组和计数记录不是解决方案。

我一直试图用JOIN来做,但没有成功。

非常感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

您可以在桌面上使用自我加入,加入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 /山姆将被报道两次。

删除重复这些副本的另一种方法是使用不同的查询:

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;

(尽管在连接条件中消除重复几乎肯定更有效)

答案 1 :(得分:0)

此查询报告所有具有非独特生日的学生。

SELECT *
FROM students s
WHERE EXISTS (
    SELECT *
    FROM students ex
    WHERE ex.dob = st.dob
    AND ex.name <> st.name
    )
ORDER BY dob
 ;

答案 2 :(得分:0)

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;