多个联接导致sql语句未正确结束

多个联接导致sql语句未正确结束,sql,oracle,oracle-sqldeveloper,Sql,Oracle,Oracle Sqldeveloper,我的问题是: select p1.driver_id, p1.name, o1.driver_id, o1.license, part.license, part.amount from (person p1 full outer join owns o1 on p1.driver_id = o1.driver_id) and (Participated part full outer join ol on part.license = o1.license) 我得到sql语

我的问题是:

select p1.driver_id, p1.name, o1.driver_id, o1.license, part.license, part.amount 
from
    (person p1 full outer join owns o1 on p1.driver_id = o1.driver_id) and
    (Participated part full outer join ol on part.license = o1.license)

我得到sql语句未正确结束的错误。我只是想在解决一个更复杂问题的过程中建立这个表。

这不是在
FROM
部分定义关系的方式。请尝试以下操作:

select p1.driver_id, p1.name, o1.driver_id, o1.license, part.license, part.amount 
from
    person p1
    full outer join owns o1 on p1.driver_id = o1.driver_id
    full outer join Participated part on part.license = o1.license;
注:

  • 在中的
    之后,您可以列出一些关系(逗号分隔),关系也可以是…
    表单上的
    完整外部联接b
  • 您还可以将这些链接(如果愿意,可以使用括号)链接为

  • 您不能使用
    来连接关系,关系仅用于连接条件
  • 可以将语句括起来形成子查询,例如

    (SELECT * FROM a FULL OUTER JOIN b ON ...) AS t
    
    但是请注意,您需要在开始时使用
    SELECT*
    将其转换为关系,并且在大多数系统中,您需要在后面使用别名(
    t


实际上,最好不要使用隐式联接(逗号分隔的
FROM
子句),因为它已被正式弃用,并且很难正确执行某些类型的联接(通常,
外部
联接…)@Clockwork Muse同意,如果一个
JOIN
操作符描述了您需要什么,那么它总是比隐式操作符更清晰。更好的语法可能是
使用(driver_id)连接
完全外部连接将为您提供
拥有
参与
有行的结果,但
个人
没有。考虑到我怀疑您的数据实际上是这样的,您可能真的需要一个常规的
内部联接
(除了
左联接
参与
)。你想报道什么?
(SELECT * FROM a FULL OUTER JOIN b ON ...) AS t
SELECT p1.driver_id, p1.name, o1.driver_id, o1.license, part.license, part.amount 
FROM person p1 
     FULL OUTER JOIN owns o1 
     ON p1.driver_id = o1.driver_id     
     FULL OUTER JOIN Participated part 
     ON part.license = o1.license