Oracle:是否可以根据列值选择要连接的表?

Car*_*eno 4 sql oracle

首先,这不是我的设计,我没有办法改变它。我有三个表,定义了操作项与事件和审核之间的关系。这些表以非常简化的形式设置如下:

ACTION_ITEMS
-------
ID    SOURCE_ID    SOURCE_TYPE
1     12345        INC
2     67890        AUD

INCIDENTS
-------
ID
12345

AUDITS
-------
ID
67890
Run Code Online (Sandbox Code Playgroud)

SOURCE_TYPE 列指示其他两个表中哪一个与该行相关。通过为事件和审核操作项创建单独的查询,将这些查询连接到适当的表,然后执行并集,获取所有记录的详细信息非常简单。

我想知道是否可以根据列的值有条件地联接到表。换句话说,类似这样但实际上有效的东西:

SELECT
   AI.*
  ,INC.*
  ,AUD.*
FROM ACTION_ITEMS AI
JOIN
  CASE AI.SOURCE_TYPE
    WHEN 'INC' THEN INCIDENTS INC ON (AI.SOURCE_ID = INCIDENTS.ID)
    WHEN 'AUD' THEN AUDITS AUD ON (AI.SOURCE_ID = AUDITS.ID)
  END;
Run Code Online (Sandbox Code Playgroud)

**编辑以澄清我正在寻求从所有表中检索数据。

D S*_*ley 6

否,但您可以连接两个表并在连接子句中使用条件:

SELECT AI.*
FROM ACTION_ITEMS AI
LEFT JOIN INCIDENTS ON AI.SOURCE_TYPE = 'INC' AND (AI.SOURCE_ID = INCIDENTS.ID)
LEFT JOIN AUDITS    ON AI.SOURCE_TYPE = 'AUD' AND (AI.SOURCE_ID = INCIDENTS.ID)
Run Code Online (Sandbox Code Playgroud)

请注意,您将能够访问任一表中的列,具体取决于SOURCE_TYPE- 如果右侧表中没有匹配项,则这些值将是NULL