你能帮我解决一个SQL查询吗?
表:学生
Id | Name | Date of birth 1 Will 1991-02-10 2 James 1981-01-20 3 Sam 1991-02-10
我需要找到一对具有相同出生日期的学生。但是,我们不允许使用GROUP BY ,因此只是分组和计数记录不是解决方案。
我一直试图用JOIN来做,但没有成功。
非常感谢您的帮助!
答案 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;