情景:比如現在有一張A城市所有學校學生資訊的表student(1000W),現在需要求學生與學生之前是否是同學關系(條件是同校同級同班),那么問題就來了,這樣student 和 student 自關聯,會產生很多關聯關系【比如一個班50個人,同學x和其他49個人都會產生關系】導致效率低下。請問有沒有更好的辦法解決?!求教!
uj5u.com熱心網友回復:
需要要用表關聯,換個思路。先查出兩個學生所有的學校 、哪一屆、班級,然后按照這三個進行分組,如果存在大于2的記錄則是同學,否則不是。select * from (
select count(1) nm,stu.學校id,stu.哪一級id,stu.班級
from student stu
where stu.id=A.id or stu.id=B.id
group by stu.學校id,stu.哪一級id,stu.班級) b where b.nm>1
uj5u.com熱心網友回復:
不需要用關聯表,上面打錯了
uj5u.com熱心網友回復:
首先謝謝你的回復!但是我的需求里面是需要 同一條記錄里展示2個學生的關系
比如 學生A XXX年入校 學生B XXX年入校 關系為同學 班級 級別 學校 這樣的格式。如果不用關聯的話,如何做到呢?
uj5u.com熱心網友回復:
應該有一個學生所屬班級的歷史表對吧,那么問題就簡單了假設這張表為T表,
select 班級相關資訊 from t where 學生主鍵=ID
能查出該學生的歷史班級資訊
那么,我們取兩個學生的交集
select 班級相關資訊 from t where 學生主鍵=學生A
intersect
select 班級相關資訊 from t where 學生主鍵=學生B
查詢結果,即重合的班級,就是他們同為同學的班級,如果沒有回傳記錄,則沒有同學關系
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/70813.html
標籤:高級技術
