0

私は次のようなさまざまなテーブルを持っています

学生
プライマリID、学生名、コース

論文
論文ID、論文名、コース、学期、タイプ

StudentOptions
プライマリID、studentid(外部キー-参照学生ID)およびpaperid(外部キー-参照紙ID)

StudentTerm
Studentid(外部キー-学生IDを参照)および学生学期

今、私が望む種類の結果は、

コースを選択してから用語を選択します。これにより、タイプ(必須/オプション)での論文/科目の数がわかります。これにより、これらすべての表からそれらの論文を勉強している学生の数を数えたいと思います。 。

ビューなどを作成したくありません。通常の選択クエリで十分です。

私が実行しているクエリは次のとおりです。

SELECT p_name,
       p_id,
       type,
       Count(sps.studentid) AS counts
FROM   students,
       str,
       papers
       LEFT JOIN sps
              ON sps.paperid = papers.p_id
WHERE  sps.studentid = students.studentid
       AND students.studentid = str.studentid
       AND sps.studentid = str.studentid
       AND str.semesterid = p_semid
       AND str.sessionid = 12
       AND students.course = c_id
       AND c_id = 6
       AND p_semid = 1
GROUP  BY p_id 
4

1 に答える 1

2

より良い方法として、明示的なJOIN構文を使用する場合は、暗黙的な構文を使用しないでください。上記で投稿したクエリでは、から選択しますがpapers、どこでも使用しません。また、列名が少しあいまいです。簡単な場合は、1文字を使用して各テーブルにエイリアスを付けるか、列名の前に明示的にプレフィックスを付けます。で集計を使用している場合GROUP BY、グループに含まれていない列を選択することはできません。

これがあなたのER図であると仮定しましょう:

まず、すべてのテーブルを結合しましょう。

SELECT a.id, a.name
FROM student a
JOIN str b ON b.student_id = a.id
JOIN sps c ON c.student_id = a.id
JOIN papers d ON d.id = c.paper_id

ここで、特定のコースとタイプの論文を勉強している学生の数を調べたいと思います。

SELECT a.id, a.name
FROM student a
JOIN str b ON b.student_id = a.id
JOIN sps c ON c.student_id = a.id
JOIN papers d ON d.id = c.paper_id
WHERE b.semester = 12
    AND d.course = 6

属性があいまいであるため、それらがどのテーブルからのものであるかを判断するのは困難です。SQL Fiddleで構造とサンプルデータを設定できれば、私たちはあなたをより良く助けることができます。

于 2012-10-29T19:27:16.823 に答える