我有一张学生表,一张课程表和一张包含学生ID和课程ID的表,我想找到所有“学生朋友”,意思是他们至少做了两门相同的课程
答案 0 :(得分:0)
WITH StudentsSubjects AS
(
SELECT 1 AS STUDENT_ID,'MATH' AS SUBJECTT
UNION ALL
SELECT 1,'ENGLISH'
UNION ALL
SELECT 1,'HISTORY'
UNION ALL
SELECT 1,'CS'
UNION ALL
SELECT 2,'HISTORY'
UNION ALL
SELECT 2,'GEO'
UNION ALL
SELECT 3,'CS'
UNION ALL
SELECT 3,'HISTORY'
)
SELECT X.PRIMARY_STUDENT,X.SECONDARY_STUDENT
FROM
(
SELECT S.STUDENT_ID AS PRIMARY_STUDENT,S.SUBJECTT,S2.STUDENT_ID AS SECONDARY_STUDENT,
ROW_NUMBER()OVER(PARTITION BY S.STUDENT_ID,S2.STUDENT_ID ORDER BY S.STUDENT_ID)D
FROM StudentsSubjects AS S
JOIN StudentsSubjects AS S2 ON S.STUDENT_ID<>S2.STUDENT_ID AND S.SUBJECTT=S2.SUBJECTT
)X WHERE X.D>1
ORDER BY X.PRIMARY_STUDENT
通用表表达式 StudentsSubjects 是“包含学生 ID 和课程 ID 的表”的替代品。将其替换为您的实际表名