2

私はSQLが初めてで、結合について読んでいましたが、少し混乱しているので助けが必要でした....

StudentIDとSportIDを格納するstudent_sportというテーブルがあります

試合の詳細を保存する別のテーブルがあります...基本的にはsportsID、MatchId、....

私がやりたいことは....特定の学生のために、試合が行われたスポーツを表示します。すなわち。スポーツIDが2番目のテーブルにのみ存在する場合、学生がどのスポーツをするかを確認すると、それが表示されます。

resultSet には、試合が行われた生徒のスポーツのみを含める必要があります....

ありがとう

4

4 に答える 4

3

さて、これは宿題なので(それについて正直に言ってくれてありがとう)私は解決策を提供しません。

クエリを設計する一般的な方法は次のとおりです。

  • FROMブロックの書き方を考えてください(データソースは何ですか)
  • WHEREブロックの書き方(どのフィルターが適用されるか)を考えてください
  • SELECTブロック(フィルタリングされたデータから必要なもの)を書き込みます。

明らかに、2つのテーブルを結合する必要があります。結合の構文は次のとおりです。

FROM table1
JOIN table2 ON boolean_condition

ここで、boolean_conditionはsportid、2つのテーブルの列が等しいことを示しています。

また、特定の学生に一致するレコードのみをWHERE句で保持するために、参加によって生成されるレコードをフィルタリングする必要があります。

その後、必要なものを選択します(すべてのスポーツIDが必要です)。

それで十分ですか?

于 2011-10-03T13:35:03.257 に答える
2

次に、2 つのテーブルがあります。

// 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

希望するもの: 1 人の生徒の場合、すべてのスポーツがすでに試合で行われています

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: Jan Hudec のコメントを含む、そのための tx

于 2011-10-03T13:40:01.493 に答える
0

student_sportテーブル から結果を返すだけでよいため、結合タイプは半結合です。半結合用の標準SQLの演算子は、おかしなことに十分ですMATCH

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

SQLで半結合を作成する方法は他にもいくつかあります。たとえば、さらに3つの方法があります。

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;
于 2011-10-03T13:49:57.220 に答える
-1

クエリは次のようになります。

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

これこれにより、SQL結合についての洞察が得られるはずです。

于 2011-10-03T13:33:24.207 に答える