【发布时间】:2021-07-11 03:02:32
【问题描述】:
我使用 Oracle 11g 并且有大量表示继承的表,其中基本父表具有主键 NUMBER ID。后续表继承自它,通过共享主键NUMBER ID 表示。假设有多层这样的继承。
为了有一个清晰的画面,让我们使用以下简化的结构并假设层次结构非常复杂:
- TABLE FOOD
- TABLE FRUIT
- TABLE CYTRUS
- TABLE ORANGE
- TABLE GREPFRUIT
- TABLE VEGETABLE
- TABLE MEAT
- TABLE BEEF
- TABLE SIRLOIN
- TABLE RIB EYE
- TABLE CHICKEN
这不是税,不管这个例子多么愚蠢,假设这样一个使用Class Table Inheritance (aka Table Per Type Inheritance)的多层层次结构。
如果要将记录插入到具有特定生成ID 的表ORANGE 中,则还必须向父表(CYTRUS、FRUIT 和FOOD)插入记录。假设 ORM 引擎会在此之后进行处理,因为保持这种一致性将非常复杂。
我们还假设层次结构中的每个表都以某个单词结尾(比如说FOOD:FRUIT_FOOD、CYTRUS_FOOD 等)——为了清楚起见,我没有将它包含在上面的图表中.
问题:我根据某些条件在FOOD 表中找到了ID = 123 的记录。由于分层结构,我如何仅使用 SQL 找到哪些表包含具有相同 ID 的记录? IE。我的目标是找出与特定ID 相关的*层次结构中最低的类型。
注意:如果您也有关于 Oracle 较新版本的答案,请不要犹豫,只要其他人觉得它有用,就将其包含在内。
【问题讨论】:
标签: sql oracle inheritance join oracle11g