2014-02-23 72 views
0

可以請一個SQL查詢幫我嗎?SQL - 查找重複條目對

表:學生

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

我需要找到對學生誰擁有出生日期相同的。但是,我們不允許使用GROUP BY,因此,簡單地對記錄進行分組和計數不是解決方案。

我一直試圖用JOIN來做,但沒有成功。

非常感謝您的幫助!

回答

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/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; 

(雖然消除了連接條件的重複幾乎肯定是更有效)

+1

'和s1.name wildplasser

+0

+1我還會用's1.name> s2.name'替換's1.name <> s2.name',以免每個對都帶來兩次 – dasblinkenlight

+0

@wildplasser:很好,謝謝 –

0

此查詢報告所有的學生誰有一個非獨特的生日。

SELECT * 
FROM students s 
WHERE EXISTS (
    SELECT * 
    FROM students ex 
    WHERE ex.dob = st.dob 
    AND ex.name <> st.name 
    ) 
ORDER BY dob 
; 
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;