引用同一表中另一行的列如何称呼?

bak*_*aka 5 oracle

我继承了一个表,其中包含一个列,该列用于在同一表中的各种相关行之间“链接”。

例如:id、bar、reference_id

  • 1, '富', 2
  • 2, '富', 3
  • 3、‘富’

我不知道如何称呼这个结构以寻找我应该如何处理它。这个想法是桌子在其自身内保持着一种活生生的历史。(我的问题是我可能有第 1 行或第 2 行,但我需要以某种方式到达第 3 行,这与我需要遍历的“级别”数无关)

Phi*_*lᵀᴹ 7

这里有几件事情在起作用。具有自引用键的表被称为具有自反外键,尽管这看起来不适用于此处,因为您将缺少值。

您正在寻找的是一个分层查询,它可以通过使用CONNECT BY子句在 Oracle 中实现。

一开始可能有点难以理解,但互联网上有很多很好的例子。一个很好的开始是在这里。一次,官方文档也很清楚!

就像是:

SELECT id, bar, reference_id, LEVEL
FROM yourtable
CONNECT BY PRIOR reference_id = id;
Run Code Online (Sandbox Code Playgroud)

... 将让您开始处理您的数据。


Mat*_*Mat 5

您将看到的用于此类表的术语是分层数据/表/查询——该表表示层次结构或某种形式的父/子关系。(有时它们被简称为树。)

Oracle 具有用于分层查询的特定 SQL 扩展,即start with/connect by关键字。

如果您只查找叶行(即没有下一个“指针”的行),您可以CONNECT_BY_ISLEAF在 where 子句中使用。就像是:

select
  name
from
  foo
where
  CONNECT_BY_ISLEAF = 1
connect by
  prior nxt = id
start with
  id = 1;
Run Code Online (Sandbox Code Playgroud)