ORACLE SQL:无法连接3个表

如何使用左外连接加入3个表?我能够在table1和table2之间进行左外连接,但不能在table3之间进行 .

我尝试了以下,但不知道如何加入table3 .

select tab1.id, tab2.status, tab3.job_history 
from table1 tab1 
left outer join table2 tab2 on tab1.id=tab2.id 
where tab1.job_title='accounting'

我的表模式是:

table 1: 
  id           number(5) primary key,
  status_code  number(5),
  job_title    varchar2(20)
  name         varchar2(30)


table 2:
   status_code  number(5) primary key,
   status       varchar2(15)

table 3:
  id           number(5)
  job_history  varchar2(20)

条件:

  • table1.status_code 可以 null

  • table1.id 可能与 table3.id 没有任何匹配

我想找到table1中有 table1.job_title = 'accounting' 的记录,或者在table3中有 table3.job_history = 'accounting'table1.id = table3.id 的记录,并且还得到_2307880_的table2状态

回答(3)

2 years ago

我怀疑你想在 status_code 而不是 id 加入 table2table1 ,因为 table2 中没有ID列 . 要加入第三个表,只需添加另一个 LEFT OUTER JOIN (或任何其他 JOIN ) .

select 
  tab1.id, 
  tab2.status, 
  tab3.job_history 
from 
  table1 tab1 
left outer join 
  table2 tab2 on tab2.status_code = tab1.status_code
left outer join
  table3 tab3 on tab3.id = tab1.id 
where 
  tab1.job_title='accounting' or tab3.job_history = 'accounting'

2 years ago

由于您在所有表上都没有相同的字段,为了满足您的条件,您可能会找到更简单的方式来运行连接:

select 
      tab1.id, 
      tab2.status, 
      tab3.job_history 
    from 
      table1 tab1,    
      table2 tab2,
      table3 tab3
    where 
      tab1.job_title='accounting'
      --ADD ADITIONAL FILTERING HERE

在3个表上使用join进行查询如下所示:

select 
  tab1.id, 
  tab2.status, 
  tab3.job_history 
from 
  table1 tab1 
left outer join 
  table2 tab2 on tab1.id=tab2.id 
left outer join  
   table3 tab3 on tab3.id = tab1.id
where 
  tab1.job_title='accounting'

2 years ago

此SQL假定表1,表2和表3之间存在一对一的关系

select tab1.id, tab2.status, tab3.job_history 
from table1 tab1 
left outer join table2 tab2 on tab2.status_code = tab1.status_code 
left outer join table3 tab3 on tab3.id = tab1.id 
where tab1.job_title = 'accounting' or tab3.job_history = 'accounting'

表3看起来包含某种形式的作业历史记录,因此表1中的每条记录可能会有多条记录 . 如果是这种情况,则需要执行子查询以查找所有目前或以前拥有会计职称的人,即

select tab1.id, tab2.status, tab1.job_title 
from table1 tab1 
left outer join table2 tab2 on tab2.status_code = tab1.status_code 
where tab1.job_title = 'accounting' or 
      tab1.id in (select id from tab3 where job_history = 'accounting')