2016-03-25 7 views
0

に少なくともの2つのコースに登録した学生の名前を調べる必要があります。別のテーブルで複数回発生する要素を1つのテーブルから選択

CREATE TABLE Student (
    StudentID varchar(20) PRIMARY KEY, 
    FirstName varchar(15), 
    LastName varchar(30), 
    Sex varchar(6), 
    DOB date, 
    Email varchar(40) 
); 

CREATE TABLE Enrols (
    StudentID varchar(20), 
    CourseID varchar(20), 
    CONSTRAINT Student_Course PRIMARY KEY (StudentID,CourseID), 
    FOREIGN KEY (StudentID) REFERENCES Student(StudentID), 
    FOREIGN KEY (CourseID) REFERENCES Course(CourseID) 
); 

マイ(失敗した)の試行:

SELECT DISTINCT Student.FirstName, 
    Student.LastName, 
    Enrols.CourseID,     
    COUNT (Student.FirstName) AS NumberOfNames 
    FROM Student 
    INNER JOIN Enrols 
    ON Student.StudentID = Enrols.StudentID 
    WHERE COUNT(Student.Firstname) >= 2; 
+0

'having'(' group by'節付き)の代わりに –

+0

助けてくれてありがとう –

+0

studentidはなぜVARCHARですか? – Strawberry

答えて

0
SELECT Student.FirstName AS "First Name", 
    Student.LastName AS "Last Name", 
    Enrols.CourseID AS "Course ID", 
    COUNT(Student.FirstName) AS "Number of Names" 
    FROM Student 
    INNER JOIN Enrols 
    ON Student.StudentID = Enrols.StudentID 
    GROUP BY Student.FirstName 
    HAVING COUNT(Student.FirstName) >= 2; 

動作しますが、あなただけの1 CourseIdが表示されます。 DISTINCTは必要ありません。

+0

を使用すると、 'FirstName'として 'StudentID'を使用する必要があります。 –

0

(あなたがして、グループを使用している場合ではなくcurseID)あなたがHAVINGGROUP BYを使用する必要があります

SELECT Student.FirstName AS "First Name", 
    Student.LastName AS "Last Name",   
    COUNT (*) AS "Number of Names" 
    FROM Student 
    INNER JOIN Enrols 
    ON Student.StudentID = Enrols.StudentID 
    HAVING COUNT(Student.Firstname) >= 2 
    GROUP BY Student.FirstName, Student.LastName; 
2つのテーブルを作成

+0

右@Strawberry ..私は答えを更新しています.. – scaisEdge

+0

のgroup by節では 'ASC'を使用しません。 'FirstName'の代わりに –

0

whereの代わりにの組み合わせを使用できますとhaving句、以下のように - これは学生のマスターテーブルの主キーがあるよう

SELECT Student.FirstName, 
     Student.LastName, 
     Student.StudentID, 
     COUNT(CourseID) AS NumberOfCourceEnroll 
    FROM Student 
INNER JOIN Enrols 
    ON Student.StudentID = Enrols.StudentID 
group by Student.FirstName, Student.LastName, Student.StudentID 
having COUNT(CourseID) >= 2; 

あなたはstudentIdによってグループ化されなければなりません。

0
SELECT DISTINCT s.* 
      FROM student s 
      JOIN enrols x 
      ON x.studentid = s.studentid 
      JOIN enrols y 
      ON y.studentid = x.studentid 
      AND y.courseid < x.courseid; 
関連する問題