根据 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] 删除。
我来说两句