如何在四个表上应用左外连接条件?

时间:2017-06-06 16:14:31

标签: sql oracle join left-join

我试图在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(+);

这是对的吗?

2 个答案:

答案 0 :(得分:2)

这是一种在 Oracle 数据库中外部加入的老式方法。对于Oracle,这个说法是正确的;在其他DBMS中,它是无效的。

无论如何,现在(从Oracle 9i开始;在其他DBMS中更长)你应该使用标准的SQL连接。

Error:(55, 40) Cannot prove that org.apache.tinkerpop.gremlin.structure.Edge <:< gremlin.scala.Vertex.

答案 1 :(得分:0)

根据你所展示的内容,你真正想要的是

select s.sname,
       c.cname,
       l.loc,
       d.dept 
from students s
LEFT OUTER JOIN college c
  ON c.SID = s.SID
LEFT OUTER JOIN locations l
  ON l.SID = s.SID
LEFT OUTER JOIN departments d 
  ON d.SID = s.SID

原始查询中的问题是,因为OUTER JOIN是一个可选的连接,您最终可以在其中一个连接字段中返回NULL值,然后阻止任何下游值被连接。我同意@ThorstenKettner的意见,他在评论中注意到SID显然是一个学生ID&#34;但是拥有一个&#34;学生ID&#34;是不合理或不恰当的。表名为COLLEGE,LOCATIONS或DEPARTMENTS的表上的字段。也许您需要更新您的设计,以允许任意数量的学生与这些实体之一相关联,可能使用&#34; join&#34;表

祝你好运。