当前位置: 首页 > 面试题库 >

直接选择进入分层用户类型

洪弘亮
2023-03-14
问题内容

是否可以直接在分层用户类型中进行选择?

想象这样的表结构:

PARENT
------
ID
NAME

CHILD
-----
ID
PARENT_ID
NAME

另外,我有这样的用户类型:

create or replace type child_item as object
(
  ID NUMBER(10),
  NAME VARCHAR(255)
);

create or replace type children_table as table of child_item;

create or replace type parent_item as object
(
  ID NUMBER(10),
  NAME VARCHAR(255),
  CHILDREN CHILDREN_TABLE
);

create or replace type parent_table as table of parent_item;

和这样的语句:

select * from parent p inner join child c on p.id = c.parent_id;

现在,我希望该语句的结果在type对象中parent_table。在不使用复杂FOR循环的情况下,这是否有可能实现?


问题答案:

您可以使用COLLECT:

SELECT parent_item(p.ID, 
                   p.NAME, 
                   CAST(COLLECT(child_item(c.id, c.NAME)) AS children_table))
  FROM PARENT p
 INNER JOIN child c ON p.id = c.parent_id
 GROUP BY p.ID, p.NAME

这将返回一个列表PARENT_ITEM,您可以将其批量收集到中PARENT_TABLE

您可以在外部查询中再次使用COLLECT来直接获取PARENT_TABLE:

SELECT CAST(COLLECT(parents) AS parent_table)
  FROM (SELECT parent_item(p.ID, 
                           p.NAME, 
                           CAST(COLLECT(child_item(c.id, c.NAME)) 
                             AS children_table)
                          ) parents
          FROM PARENT p
         INNER JOIN child c ON p.id = c.parent_id
         GROUP BY p.ID, p.NAME)


 类似资料:
  • 我的数据库中有两个表: 我怎么能这样回报: 我在类别表中使用“WITH RECURSIVE”,但找不到将产品表与1次查询相结合的方法。我使用这里的例子 最好的方法是什么?

  • 问题内容: 我试图根据选择的结果创建一个新表。这在SQL Server上可以正常工作: 现在,我想用HSQLDB(2.2版)实现完全相同的功能。我尝试了几种形式,例如 所有这些变体都会导致某种形式的语法错误。如何使用HSQLDB从select创建表? 问题答案: 的手册中有一个例子为这样的: HSQLDB 需要 在select周围加上括号(与所有其他DBMS不同),并且还需要该子句

  • 问题内容: 我想测试一种情况,但是我需要添加一个虚拟数据行来测试假设。因此,根据此SELECTINTO的mySQL手册页,我的查询是正确的: 但是我收到以下错误消息: “您的SQL语法有误;请在与MySQL服务器版本相对应的手册中查找在’INTO course.sections_rfip(SectionID,CourseID,SectionNumber,Term,学分,第1行的’附近使用的正确语法

  • cesium每更新一个版本,就会导致默认的三维球不可见,原因是bingkey发生了变化,如果我们想设置三维球加载的初始图层,可以修改viewer的imageryProvider属性,但是这样做会导致一个问题:baseLayerPicker控件的按钮图标会显示为空白 今天我们来解决这个问题。 拿到问题不要直接开怼,想一想,应该怎么做? 首先我们知道这个控件就是一个div,那毫无疑问,使用js强制修改

  • 引入 import { createApp } from 'vue'; import { TreeSelect } from 'vant'; const app = createApp(); app.use(TreeSelect); 代码演示 单选模式 item 为分类显示所需的数据,数据格式见下方示例。main-active-index 表示左侧高亮选项的索引,active-id 表示右侧高

  • 问题内容: 我有一个表,用于存储目录信息(例如在文件系统中)。每个目录(命名节点)都有一个和一个。我想尽可能有效地检索完整路径。为此,我试图使以下查询正常工作,但是这些查询仅返回预期的第一行(实际上是最里面的目录)。任何人都可以帮助获取完整的结果集,以便也选择给定目录/节点的所有层次结构父级。 我目前正在尝试的查询: 选择: 选择: 样本数据: 所需的输出: 谁能帮忙吗? 问题答案: 您已经错过了