Oracle 如何仅有条件地联接多个表中的某些表?

Oracle 如何仅有条件地联接多个表中的某些表?,oracle,plsql,Oracle,Plsql,我需要按ID查找有关个人的数据,数据可以在两个表中的任意一个表中—客户表或员工表。我有一个值,显示在哪个表中查找该人员。此外,此搜索需要包含在更大的查询中 似乎应该编写某种类型的条件联接。但如何做到这一点呢?我一直在谷歌上搜索,什么也没找到。我需要一些类似的东西 if person_type = 0 then outer left join customers_table elsif person_type = 1 then outer left join employees_table 外部

我需要按ID查找有关个人的数据,数据可以在两个表中的任意一个表中—客户表或员工表。我有一个值,显示在哪个表中查找该人员。此外,此搜索需要包含在更大的查询中

似乎应该编写某种类型的条件联接。但如何做到这一点呢?我一直在谷歌上搜索,什么也没找到。我需要一些类似的东西

if person_type = 0 then outer left join customers_table
elsif person_type = 1 then outer left join employees_table

外部连接,包括附加条件

第1-14行代表样本数据;您需要的查询从第15行开始

SQL> with
  2  person (id, name, person_type) as
  3    (select 1, 'Scott', 0 from dual union all
  4     select 2, 'King' , 1 from dual
  5    ),
  6  customers (id, name) as
  7    (select 1, 'Customer Scott' from dual union all
  8     select 2, 'Customer King'  from dual
  9    ),
 10  employees (id, name) as
 11    (select 1, 'Employee Scott' from dual union all
 12     select 2, 'Employee King'  from dual
 13    )
 14  --
 15  select p.id, p.name, p.person_type,
 16    nvl(c.name, e.name) cust_emp_name
 17  from person p left join customers c on p.id = c.id and p.person_type = 0
 18                left join employees e on p.id = e.id and p.person_type = 1
 19  order by p.id;

        ID NAME  PERSON_TYPE CUST_EMP_NAME
---------- ----- ----------- --------------
         1 Scott           0 Customer Scott
         2 King            1 Employee King

SQL>