2016-08-03 35 views
0

私のデータベースには3つのテーブルがあり、多対多の関係を持つテーブルがあります。クエリ内で複数の結果を使用してクエリ内で結合する

1. Student (student_id, student_name) 
2. Sport (sport_id, sport_name) 
3. Departm (depart_id, depart_name) 
4. Sch (sch_id, sch_name) 
5. StudSport(relationid, studendid, sportid, departid, schid) 

私がしたいことは、たとえばです。私がIDを知っているときに関係に基づいて部門の名前を取得します。私はこのようなIDを取得することができます。

SELECT departid, schid from studsport 
inner join Student on student_id = studentid 
inner join Sport on sport_id = sportid 
where student_id = 1 and sport_id=2 

が、私は、部門とそれに対応するテーブルからSCHの名前を取得したい、と私はそれを行う方法を知りません。

答えて

0

StudentまたはSportから何も選択しないので、対応する内部結合を削除できます。

SELECT d.depart_name, sch.sch_name FROM StudSport s 
INNER JOIN Sch sch ON s.schid = sch.sch_id 
INNER JOIN Departm d ON s.departid = d.depart_id 
WHERE s.studendid = 1 AND s.sportid = 2 
+0

これはすごくうまくいった、ありがとう! – MariaZ

0

このようなもの???

select sch.sch_nam, departm.depart_name, 

-- what you have already -- 

Left outer Join StudSport on Student.student_id = Studsport.studentid and Sport.sport_id = StudSport.sportid 
left outer Join Sch on StudSport.schid = Sch.sch_id 
left outer join Departm on studsport.depart_id = studsport.departid 

これはテストされていないため、フィドルはそのために答えを与えるのがずっと簡単です。

EDIT - 下書きが降り始める前に、元のクエリを誤読しました。今すぐ修正してください。あなたはLEFT OUTERとINNER結合を使用する必要があり

方法は、データの意味する方法である(再び、フィドルが正常に便利になります)が、それはだけのカップルは、あなたが私は推測していたものから参加します:

select * 

from studsport 
join student on studsport.studentid = student.student_id 
join sport on studsport.sportid = sport.sport_id 
left outer Join Sch on StudSport.schid = Sch.sch_id 
left outer join Departm on studsport.depart_id = studsport.departid 

where student_id = 1 and sport_id=2 
+0

私はこれを試してみましょう、ありがとう! – MariaZ

関連する問題