oracle中TABLE子句的功能

用户062

根据 oracle 文档,我正在努力理解 TABLE 子句的作用:

它将像嵌套表这样的集合转换为可以在 sql 语句中使用的表。

这似乎很清楚,但我不知道它在实践中是如何工作的。

这些是相关的类型和表格;

create type movies_type as Table of ref movie_type;

create type actor_type under person_type

(

starring movies_type

) Final;

create table actor of actor_type

NESTED TABLE starring STORE AS starring_nt;

我想列出他们出演的演员和电影,这行得通

select firstname, lastname, value(b).title

from actor2 a, table(a.starring) b;

但我不明白为什么。为什么不是这个

actor2 a, table(a.starring) b

笛卡尔积?

另外,为什么 value(b) 在这里工作?,因为它是参考表,它应该是 deref,但这不起作用。

我的问题是:

为什么此查询按预期工作?我希望它列出每部电影(笛卡尔积)的每个演员,因为没有关于如何加入的特定条件,为什么 value(b) 在这里起作用?,因为它是参考表,它应该是 deref,但是不起作用。

我没有oracle sql的心智模型,非常感谢有关如何正确学习的帮助。

非常感谢您。

安德鲁·赛耶

它不是笛卡尔积,因为table(a.starring)它与以下各项相关a:对于其中的每一行,a它都针对其嵌套表运行该table函数。starring

这在 Oracle 中不是一种非常常见的数据建模方式,通常您会使用联结表来允许正确规范化的模型(这通常更容易查询并允许更好的性能)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章