可以請一個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來做,但沒有成功。
非常感謝您的幫助!
可以請一個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來做,但沒有成功。
非常感謝您的幫助!
您可以使用自聯接在桌子上,加入對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;
'和s1.name
wildplasser
+1我還會用's1.name> s2.name'替換's1.name <> s2.name',以免每個對都帶來兩次 – dasblinkenlight
@wildplasser:很好,謝謝 –