我对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 回答
如果您只想在单个查询中确定
event
与哪个子类别表相关,则需要将event
表连接到每个子类别表 . 但是,这可能不是最有效的查询从表设计的角度来看,如果您通常将子类别存储在
event
表中,以便告诉您要加入哪个表,而不是稍后尝试推断该信息 . 您现在可以添加该列,使用我发布的查询来回填信息,然后填充该列 .如果您真的只是进行单行查找,而不是加入19个表,那么编写一个按可能性顺序检查表的PL / SQL函数可能更有效(即,如果一个事件子类别构成20%在所有事件中,首先检查该表)并在找到匹配后停止查找 .
贾斯汀的方式会很好 . 如果事件编号在所有列中编入索引,我建议如下:
创建如下视图
(如果有意义,可以添加更多列)
现在您需要做的就是查询给定事件编号的此视图 . 如果事件编号在所有表上编入索引,那么它将非常快 .