0

私はこのタイプの質問をカバーするStackoverflowに関する多くの質問を研究しましたが、私が求める解決策を得ることができませんでした。

これが私のテーブルです:

STUDENT
studentID   lastName   firstName
08422567    Brown      Susan
10356844    Black      Roger
10659475    White      Steven
09463729    Grey       Naomi


MODULE
moduleID   moduleName
CE1181     Biometrics
CE1183     Intelligent Systems
CE1133     Databases
CE1186     HCI

GRADES
studentID*  moduleID*  grade
10356844    CE1181     A
10356844    CE1183     B
10356844    CE1133     C
10356844    CE1186     A
08422567    CE1181     B
08422567    CE1183     B
08422567    CE1133     B
08422567    CE1186     B
10659475    CE1181     C
10659475    CE1183     C
10659475    CE1133     A
10659475    CE1186     C
09463729    CE1181     A
09463729    CE1183     B
09463729    CE1133     B
09463729    CE1186     B

実行する必要のあるクエリは次のとおりです。

Select all from students whose id begins with 10 and their grade for intelligent systems was a B

これで、テーブルを結合する必要があることがわかりました。成績テーブルに生徒テーブルとモジュールテーブルに接続する外部キーが含まれるようにテーブルを作成しました。

初心者として、このタイプのクエリは私が苦労するのは非常に難しいです、私は答えに近いことを願っています、これは私が持っているものです:

SELECT * FROM student WHERE studentID LIKE '10%' INNER JOIN grades
ON student.studentID=grades.studentID  INNER JOIN module
ON grades.moduleID =module.moduleID

もちろんそれは機能しませんが、私は正しい方向に進んでいますか?この質問に対する正しい解決策は、後で使用するためにコードツールボックスに保存しておくとよいでしょう。

4

2 に答える 2

3

ほぼそこにありますが、条項WHEREの後に行く必要があります。JOIN構文を単純化するためにエイリアスを使用しました。

SELECT s.* 
FROM   grades g 
       JOIN module m 
         ON m.moduleid = g.moduleid 
       JOIN student s 
         ON s.studentid = g.studentid 
WHERE  g.studentid LIKE '10%' 
       AND g.grade = 'B' 
       AND m.modulename = 'Intelligent Systems' 

結果

| 学生| 姓| 名|
------------------------------------
| 10356844 | 黒| ロジャー|

デモを見る

于 2013-03-11T00:28:33.530 に答える
1

WHERE句は句の後に続く必要がありますFROM

SELECT  a.*, b.*, c.*   -- deselect the columns you don't want to show
FROM    student a
        INNER JOIN grades b
            ON a.studentID = b.studentID  
        INNER JOIN module c
            ON b.moduleID = c.moduleID
WHERE   a.studentID LIKE '10%' AND
        b.grade = 'B' AND
        c.modulename = 'Intelligent Systems' 

結合についてさらに知識を深めるには、以下のリンクにアクセスしてください。

結果

╔═══════════╦══════════╦═══════════╦══════════╦═══════╦═════════════════════╗
║ STUDENTID ║ LASTNAME ║ FIRSTNAME ║ MODULEID ║ GRADE ║     MODULENAME      ║
╠═══════════╬══════════╬═══════════╬══════════╬═══════╬═════════════════════╣
║  10356844 ║ Black    ║ Roger     ║ CE1183   ║ B     ║ Intelligent Systems ║
╚═══════════╩══════════╩═══════════╩══════════╩═══════╩═════════════════════╝
于 2013-03-11T00:27:23.287 に答える