как мне это сделать в sql?

#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 заменяет вашу «таблицу, содержащую идентификатор студента и идентификатор курса». Замените его своим фактическим именем таблицы