#sql #sql-server
Вопрос:
У меня есть таблица студентов, таблица курсов и таблица, содержащая идентификатор студента и идентификатор курса, я хочу найти всех «друзей-студентов», что означает, что они проходят по крайней мере два одинаковых курса
Комментарии:
1. Не могли бы вы, пожалуйста, опубликовать то, что вы пробовали до сих пор?
2. Примеры данных, ожидаемые результаты и ваши попытки помогут нам помочь вам. Если вы ничего не пробовали, какие исследования вы провели? Что ты в этом не понял? Кроме того, какие СУБД вы действительно используете? SQL Server и MySQL-это совершенно разные продукты.
3. Я использую SQL Server, я не знаю, как это сделать, я думал о том, чтобы сделать это с помощью While и сопоставить одну строку со всеми строками в таблице;
Ответ №1:
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 заменяет вашу «таблицу, содержащую идентификатор студента и идентификатор курса». Замените его своим фактическим именем таблицы