2017-12-08 6 views
0

私は3つのテーブルSTUDENT、SUBJECT、およびGRADEを持っています。別のテーブルに特定の値/条件を持つレコードを選択する方法

STUDENT

+------------+------------+------------+ 
| student_id | first_name | last_name | 
+------------+------------+------------+ 
|   0 | Arthur  | Pain  | 
|   1 | Richard | Gordon  | 
|   2 | Jennifer | Adelaide | 
+------------+------------+------------+ 

SUBJECT

+------------+--------------+ 
| subject_id | subject_name | 
+------------+--------------+ 
|  001 | Math   | 
|  002 | Science  | 
|  003 | English  | 
+------------+--------------+ 

GRADE

+-------------+-------------+--------+ 
| student_id | subject_id | grade | 
+-------------+-------------+--------+ 
| 0   | 001   | A  | 
| 0   | 002   | B  | 
| 0   | 003   | A  | 
| 1   | 001   | B  | 
| 1   | 002   | A  | 
| 1   | 003   | F  | 
| 2   | 001   | A  | 
| 2   | 002   | B  | 
| 2   | 003   | B  | 
+-------------+-------------+--------+ 

私は、以下のクエリを試してみました。

SELECT * FROM student st WHERE EXISTS 
     (SELECT 1 FROM grade g WHERE st.student_id = g.student_id AND g.grade IN ('A','B'); 

私は成績だけで 'A' または 'B' を持つ学生を選択します。

+0

'*'と "1" を交換してみてください。 g.gradeの代わりにGradeを直接使うことができます –

+0

@jasinthpremkumarなぜ '1'を' * 'に置き換えますか?すべての列は必要ありません。 – Eric

+0

すべての列が必要です –

答えて

0

は、単純に加えることではないが存在するもの:

SELECT * 
FROM student st 
WHERE EXISTS (SELECT NULL 
       FROM grade g 
       WHERE st.student_id = g.student_id 
        AND g.grade IN ('A','B')) 
AND NOT EXISTS (SELECT NULL 
        FROM grade g 
       WHERE st.student_id = g.student_id 
        AND g.grade IN ('C', 'D', 'F')) 
0

試してみてください。

SELECT * 
    FROM student s 
WHERE NOT EXISTS 
      (SELECT 1 
      FROM grade g 
      WHERE g.student_id = s.student_id AND grade NOT IN ('A', 'B')); 
0

あなたが複数のテーブル

select s.*,g.* from student as s 
inner join GRADE as g on g.student_id=s.student_id 
inner join SUBJECT as sj on sj.subject_id = g.subject_id 
where g.grade in ('A','B') 

私はこのことを願っていますを接続する結合を使用することができます助けるでしょう

使用
0
SELECT * FROM STUDENT 
LEFT JOIN GRADE ON STUDENT.STUDENT_ID = GRADE.STUDENT_ID 
LEFT JOIN SUBJECT ON GRADE.SUBJECT_ID = SUBJECT.SUBJECT_ID 
WHERE GRADE.GRADE IN ('A','B') 
0

NOT IN:

SELECT * FROM student st WHERE student_id not in 
     (SELECT student_id FROM grade g WHERE grade = 'F'); 
0
SELECT * 
    FROM STUDENT 
WHERE student_id IN (SELECT student_id 
         FROM GRADE 
         WHERE grade IN ('A', 'B')); 

代わり:

SELECT DISTINCT student_id, first_name, last_name 
    FROM STUDENT NATURAL JOIN GRADE 
WHERE grade IN ('A', 'B'); 
関連する問題