我对Oracle SQL Developer非常陌生,我有一个想要尝试的想法,但我不确定它是如何可能的(反正这可能是一个愚蠢的问题)
以下是案件的事实:
我想构建一个查询,它将主表中的EVENT NUMBER交叉引用到它的特定子表。例如,某人给了我一个活动编号。我可以去EVENT MASTER TABLE找到它,但我也想找出它所在的子表。
答案 0 :(得分: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函数可能更有效(即,如果有的话) event子类别构成所有事件的20%,首先检查该表,并在找到匹配后停止查找。
答案 1 :(得分: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
(如果有意义,可以添加更多列)
现在您需要做的就是查询给定事件编号的此视图。如果在所有表上索引事件编号,那么它将超快。