SQL Query Join 2 таблицы - PullRequest
       25

SQL Query Join 2 таблицы

2 голосов
/ 03 октября 2011

Я новичок в SQL и читал на соединениях, но я немного запутался, поэтому хотел помочь ....

У меня есть таблица с именем student_sport, в которой хранятся StudentID и SportID

У меня есть еще одна таблица, в которой хранится информация о матчах ... так что в основном sportsID, MatchId, ....

Что я хочу сделать, это ... для ученика с чередованием показывать виды спорта, в которых были совпаденияиграл.то есть.если sportID существует только во второй таблице, отобразите это при проверке того, какими видами спорта занимается учащийся.

В результирующем наборе должны быть указаны только те виды спорта, в которых учащийся провел матчи ...

Спасибо

Ответы [ 4 ]

3 голосов
/ 03 октября 2011

Хорошо, так как это домашняя работа (спасибо за честность), я не буду предлагать решение.

Общий способ создания запроса:

  • Подумайте окак написать блок FROM (каков ваш источник данных)
  • Подумайте о том, как написать блок WHERE (какие фильтры применяются)
  • Записать блок SELECT (что вы хотите из отфильтрованных данных)).

Вам, очевидно, нужно объединить две таблицы.Синтаксис для объединений:

FROM table1
JOIN table2 ON boolean_condition

Здесь ваше логическое_условие - это равенство между столбцами sportid в ваших двух таблицах.

Вам также необходимо отфильтровать записи, которые создаст ваше объединение,чтобы сохранить только те из них, которые соответствуют вашему конкретному ученику, с предложением WHERE.

После этого выберите то, что вам нужно (вам нужны все спортивные идентификаторы).

Достаточно ли это помогает

2 голосов
/ 03 октября 2011

Тогда у вас есть две таблицы:

// One record per student / sport association
student_sport
    StudentID 
    SportID

// A match is only for one sport (warning to your plural) no?
matches
    SportID
    MacthID

Вы хотите: Для одного студента весь спорт, уже сыгранный в матче

SELECT DISTINCT StudentID, student_sport.SportID
FROM student_sport, matches

WHERE 
      -- Select the appropriate player
      student_sport.StudentID = @StudentID    
      -- Search all sport played in a match and plays by the student 
      -- (common values sportid btw student_sport & matches)
  AND student_sport.SportID = matches.SportID 

или используйте этот другой синтаксис (JOIN IN) (он упрощает понимание сложных запросов, поэтому его полезно изучать)

SELECT DISTINCT StudentID, student_sport.SportID
FROM student_sport
-- Search all sport played in a match and plays by the student 
-- (common values sportid btw student_sport & matches)
INNER JOIN matches on student_sport.SportID = matches.SportID
WHERE 
      -- Select the appropriate player
      student_sport.StudentID = @StudentID    

ps: включает комментарии Яна Худека, tx для него

0 голосов
/ 03 октября 2011

Поскольку вам нужно только вернуть результаты из таблицы student_sport, тип соединения - semijoin . Стандартный оператор SQL для полу соединения достаточно забавен MATCH например.

SELECT * 
  FROM student_sport 
 WHERE SportID MATCH (
                      SELECT SportID   
                        FROM matches
                       WHERE student_sport.SportID = matches.SportID
                     );

Существует множество других способов написания полусоединения в SQL, например. вот еще три:

SELECT * 
  FROM student_sport 
 WHERE SportID IN (
                   SELECT SportID  
                     FROM matches
                    WHERE student_sport.SportID = matches.SportID
                  );

SELECT * 
  FROM student_sport 
 WHERE EXISTS (
               SELECT * 
                 FROM matches
                WHERE student_sport.SportID = matches.SportID
              );

SELECT student_sport.* 
  FROM student_sport 
       INNER JOIN matches
          ON student_sport.SportID = matches.SportID;
0 голосов
/ 03 октября 2011

Ну, запрос будет выглядеть примерно так:

select sm.* 
from student_sport ss join student_matches sm on ss.sportid = sm.sportId
where ss.StudentId = @studendId

Это и это должно дать вам некоторое представление о соединениях sql

...