【发布时间】:2017-06-06 16:14:31
【问题描述】:
我试图在 4 个表上应用联接。但我找不到合适的结果。 我有 4 个表,例如 1.students、2.college、3.locations、4.departments。所以我在所有可用于连接条件的表中都有相同的列 sid。 我想要四个表中的所有匹配行,如下面的 select 语句中提到的列,以及左表中不匹配的行,这是左外连接工作。
我已经尝试过这种语法。
select
students.sname,
college.cname,
locations.loc,
department.dept
from students, college, locaions, departments
where student.sid=college.sid(+)
and college.sid=locations.sid(+)
and locations.sid=department.sid(+);
这样对吗?
【问题讨论】:
-
sid代表什么?我敢肯定,这不是学生证,因为学生没有地点或部门。sid在四个表之一中是唯一的吗? -
@Gordon Linoff:我也正要标记 Oracle :-) 但后来我想也许 OP 不使用 Oracle,而只是从 Internet 上获得了语法。因此,我的回答是这种语法仅限于 Oracle。
-
我认为您可能需要一个完整的外部连接,因为可能有没有大学的学生和没有学生的大学。
-
@access_granted 。 . .有趣的。我认为学生(嗯,college 学生)必然被大学(或同等学历)录取。同样,我很难想到没有学生的教育机构“学院”(当然不是选举学院)。
-
嗯,例如辍学或仍在申请的人。将每个人都称为学生可能看起来比引入 2 个实体(人和学生)更简洁。至于没有学生的大学 - 看看southharmoninstituteoftechnology.org