首页 文章

在ORACLE SQL Developer中使用SUB TABLES交叉引用MASTER表

提问于
浏览
0

我对Oracle SQL Developer很新,我有一个想要尝试的想法,但我不确定它是如何可能的(这可能是一个愚蠢的问题)

以下是案件的事实:

  • 我在oracle中有一个包含许多表的模式 . 大约100左右 .

  • 在这100个表中,其中大约20个是我们所说的'EVENT TABLES',它记录了数据库中发生的各种类型的事件 . 每个EVENT都是独一无二的 .

  • 19个表是子类EVENT表 . 基本上,按类型分类的表格 . (即客户联系信息变更的事件表,LAND OWNERSHIP变更的另一个事件表,付款信息的另一个事件表等)

  • 有一个EVENT表是MASTER TABLE,它包含所有事件,无论其类型如何 . 该表加载了19个子类别表中的事件 . 如果事件记录到一个特定的子表中,它也会记录在MASTER TABLE中

  • 所有表都有一个名为'EVENT_NUMBER_ID'的列,该列是针对发生的事件记录的唯一编号 . 此列是19个子类别表和主表之间的连接列

我想构建一个查询,将主表中的EVENT NUMBER交叉引用到它的特定子表 . 例如,某人给了我一个活动编号 . 我可以去EVENT MASTER TABLE并在那里找到它,但我也想找出它所在的子表 .

2 回答

  • 1

    如果您只想在单个查询中确定 event 与哪个子类别表相关,则需要将 event 表连接到每个子类别表 . 但是,这可能不是最有效的查询

    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
    

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

    如果您真的只是进行单行查找,而不是加入19个表,那么编写一个按可能性顺序检查表的PL / SQL函数可能更有效(即,如果一个事件子类别构成20%在所有事件中,首先检查该表)并在找到匹配后停止查找 .

  • 1

    贾斯汀的方式会很好 . 如果事件编号在所有列中编入索引,我建议如下:

    创建如下视图

    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
    

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

    现在您需要做的就是查询给定事件编号的此视图 . 如果事件编号在所有表上编入索引,那么它将非常快 .

相关问题