2017-01-23 6 views
0

接合テーブル内の外部キーによって参照される2つの親テーブルを持つDBを取得しました。ある親テーブルから関連するすべての行を取得する方法を説明します。SELECTは親テーブルから値を取得します。接合テーブルを使用して別の親テーブルから値を取得します

schoolA_courses: 
id 
course_prefix 
course_number 

schoolB_courses: 
id 
course_prefix 
course_number 

schoolB_equivalencies: 
equivalency_id 
schoolA_id 
schoolB_id 
FOREIGN KEY (schoolA_id) REFERENCES schoolA_courses (id) 
FOREIGN KEY (schoolB_id) REFERENCES schoolB_courses (id) 

と行を次のようになります。次のテーブルと列と例えば、schoolAコースの接頭辞と番号が与えられ

schoolA: 
1, MATH, 101 
2, SOCI, 100 
3, HIST, 211 

schoolB: 
1, MATH, 100 
2, MATH, 110 
3, ENGL, 210 

schoolB_equivalencies: 
1, 1, 1 (school A's MATH 101 equivalent to school B's MATH 100) 
2, 1, 2 (school A's MATH 101 equivalent to school B's MATH 110) 

どのようにすることができ、を(のはMATH 101をしましょう)私はschoolB_equivalenciesテーブルに等価としてリストされているすべてのschoolBコースの接頭辞/番号のペアを見つけるためにSELECTクエリを構成しますか?例えば、私のMATH 101ダミーのコースで、どのように私は

MATH 100 
MATH 110 

答えて

1

になるだろう。このクエリでは、オリジナルのコースについての情報を取得します。

SELECT * 
FROM schoolA 
WHERE course_prefix = 'MATH' 
    AND course_number = 101; 

このクエリは、ジャンクションテーブルに対応する行に関する情報を取得します:

SELECT * 
FROM schoolB_ueqivalencies 
WHERE schoolA_id = (SELECT id 
        FROM schoolA 
        WHERE course_prefix = 'MATH' 
         AND course_number = 101); 

そして、このクエリはschoolBに対応する行についての情報を取得します。

SELECT * 
FROM schoolB 
WHERE id IN (SELECT schoolB_id 
      FROM schoolB_ueqivalencies 
      WHERE schoolA_id = (SELECT id 
           FROM schoolA 
           WHERE course_prefix = 'MATH' 
            AND course_number = 101)); 
関連する問題