使用联接

时间:2016-08-03 12:26:04

标签: mysql

我的数据库中有一些表,三个主表和一个表示多对多关系的表。

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的名称,我不知道该怎么做。

2 个答案:

答案 0 :(得分: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

这是未经测试的,因为这一点,因此更容易给出答案。

编辑 - 我误读了你的原始查询 - 在downvotes开始下雨之前 - 立即修复它。

你应该使用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

答案 1 :(得分:0)

由于您没有从学生或体育中选择任何内容,因此您可以删除相应的内部联接。

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