2017-05-15 9 views
1

インストラクターID, name, dept_name, salary含まれているテーブルからすべてのデータを取得する2つの外部キーのデータ

学生ID, name, dept_name, tot_cred

顧問s_ID, i_IDのための学生証とインストラクターのIDが含まれています2つのテーブル。

私はadvisordepartment私はintructorはFOMコンピュータサイエンスでwhrer講師と学生のすべてのIDを見つけることができますCComp.Sci

すべてinstructorstudent's名前を見つける必要があります。そして、学生の名前だけ。

しかし、両方の名前を同時に把握することはできません。

私はこれを書いた:

SELECT student.name 
    FROM student 
WHERE student.ID in (SELECT advisor.s_ID 
         FROM advisor 
          , instructor 
         WHERE advisor.i_ID = instructor.ID 
         and instructor.dept_name = 'Comp.Sci') 

答えて

0

あなたに悪いパフォーマンスを与える、また、それはあなたがwhere句内のテーブルからデータを取得することはできませんでしょう。

教師名の結果を生徒の名前で取得することを意味する場合の解決策です。

SELECT S.name AS Student,I.name AS Instructor 
FROM Students AS S 
JOIN Advisor AS A ON A.s_ID = S.Id 
JOIN Instructor AS I ON I.Id = A.i_ID 
WHERE I.dept_name = 'Comp.Sci' 

*あなたはすべての学生にもこれらのインストラクター利用LEFTが不足している人は、私も自分で見つけ

+0

を登録しよう得るために、たとえばたい場合、私は別名

**を使用予告。 'SELECT S.name AS学生、I.name ASインストラクターからAS AS JOINアドバイザーA AS_ ON = A.I_ID WHERE I.dept_name = 'Comp.Sci '' – Sudarshan

1

私はあなたがここに必要だと思う根本解決はちょうど単純な3つのテーブル間の結合です。しかし、学生とインストラクターの両方の名前のリストが必要なので、これは事を複雑にします。 1つの選択肢は、一致する教師を見つけるクエリと一致する学生を見つけるクエリを一緒に結合することである。 「..(..)で、」使用

SELECT s.name, 'student' AS type 
FROM student s 
INNER JOIN advisor a 
    ON s.ID = a.s_ID 
INNER JOIN instructor i 
    ON a.i_ID = i.ID 
WHERE i.dept_name = 'CComp.Sci' 
UNION ALL 
SELECT DISTINCT i.name, 'instructor' 
FROM student s 
INNER JOIN advisor a 
    ON s.ID = a.s_ID 
INNER JOIN instructor i 
    ON a.i_ID = i.ID 
WHERE i.dept_name = 'CComp.Sci' 
関連する問題