在SQL中组合6个表的复杂连接

时间:2014-08-11 17:20:14

标签: sql oracle-apex

我正在尝试使用此代码加入6个表

select publications.ISSUE_NUMBER,publications.pages,publications.ihe_issue_id , 
       publications.PUBLISHER_NAME , people.first_name, 
       people.last_name,countries.country, people.email, content.name_display
FROM publications
join content
content.content_id = publications.content_id
join people
people.content_id = content.content_id
JOIN pubauthor_people ON 
people.people_id = pubauthor_people.people_id 
JOIN countries ON 
countries.country_id = people.mail_country_id 
JOIN content ON
content.content_id = people.content_id

我收到错误

  

ORA-00905:缺少关键字。

我不认为我错过了关键字。

2 个答案:

答案 0 :(得分:2)

好吧,您似乎错过了前两个联接中的ON

FROM publications
     JOIN content ON <== missing ON
       content.content_id = publications.content_id
     JOIN people ON <== missing ON
       people.content_id = content.content_id

答案 1 :(得分:1)

对于前两个JOIN,您缺少ON关键字,如下所示

FROM publications
join content
content.content_id = publications.content_id <-- Here
join people
people.content_id = content.content_id <-- Here

旁注:由于您在加入join表时已经这样做,因此您的content people表格是不必要的。

JOIN content ON
content.content_id = people.content_id

再进一步,JOINpubauthor_people表是不必要的,因为我没有看到你从该表中获取任何列,也没有与其他表的依赖关系。

您的最终查询应如下所示

select publications.ISSUE_NUMBER,
publications.pages,
publications.ihe_issue_id , 
publications.PUBLISHER_NAME , 
people.first_name, 
people.last_name,
countries.country, 
people.email, 
content.name_display
FROM publications
join content
on content.content_id = publications.content_id
join people
on people.content_id = content.content_id 
JOIN countries ON 
countries.country_id = people.mail_country_id;