交叉引用 MASTER Table 与 ORACLE SQL 中的子表

Cross Referencing MASTER Table with SUB TABLES in ORACLE SQL Developer

我对 Oracle SQL Developer 还很陌生,我有一个想尝试的想法,但我不确定这怎么可能(无论如何这可能只是一个愚蠢的问题)

以下是案件的事实:

我想构建一个查询,将事件编号从主 table 交叉引用到它的特定子 table。例如,有人给了我一个事件编号。我可以去 EVENT MASTER TABLE 那里找到它,但我也想找出它所在的子 table。

如果您只想在单个查询中确定 table 与 event 相关的子类别,您需要将 event table 加入每个子类别 tables。这可能不是对 运行 最有效的查询,但是

SELECT e.event_number_id,
       (case when sc1.event_number_id IS NOT NULL then 'SC1'
             when sc2.event_number_id IS NOT NULL then 'SC2'
             ...
             when sc19.event_number_id IS NOT NULL then 'SC19'
         end)
  FROM event e
       LEFT OUTER JOIN subcategory1 sc1
         ON( e.event_number_id = sc1.event_number_id )
       LEFT OUTER JOIN subcategory2 sc2
         ON( e.event_number_id = sc2.event_number_id )
       ... 
       LEFT OUTER JOIN subcategory19 sc19
         ON( e.event_number_id = sc19.event_number_id )
 WHERE e.event_number_id = xxx

从 table 设计的角度来看,如果您要有子类别 table,您通常会将子类别存储在 event table 中以便告诉您加入哪个 table 而不是稍后尝试推断该信息。您现在可以添加该列,使用我发布的查询来回填信息,然后继续填充该列。

而不是连接到 19 tables,如果你真的只是在做一个单行查找,写一个检查 [=21] 的 PL/SQL 函数可能更有效=]s 按可能性排序(即,如果一个事件子类别占所有事件的 20%,则首先检查 table),一旦找到匹配项就停止查找。

Justin 的方法很管用。如果事件编号在所有列中都已编入索引,我建议如下:

创建如下所示的视图

     Select 'Type1' as EventType, event_number_id from event1
       union all
     Select 'Type2' as EventType, event_number_id from event2
       union all
     Select 'Type3' as EventType, event_number_id from event3
       union all
     Select 'Type4' as EventType, event_number_id from event4
       union all
         -- ...
     Select 'TypeN' as EventType, event_number_id from eventN

(如果有意义,您可以添加更多列)

现在您需要做的就是在该视图中查询给定的事件编号。如果事件编号在所有表上都被索引,它将非常快。