如何在Oracle 11g中获取层次结构联接数据的根

F0RR

我的架构如下所示。

我有分层区域:

create table district(
  id integer primary key,
  name varchar2(32),
  parent_id integer references district(id)
)

以及地区内的房屋:

create table house(
  id integer primary key,
  name varchar2(32),
  district_id integer references district(id)
)

house.district_id始终在底部district的层次。如何选择每一个房子,并idname该的district层次理论?

目前,我正在使用两个子查询,但是感觉不对:

select 
  h.id, 
  h.name,
  (
    select id from district
     where parent_id is null
     start with id = house.district_id
   connect by parent_id = id
  ) as district_id,
  (
    select name from district
     where parent_id is null
     start with id = house.district_id
   connect by parent_id = id
  ) as district_name
from house;

Oracle版本是11g第2版。

样本数据:地区

+-------------------+
| id name parent_id |
+-------------------+
| 1 'one' NULL      |
| 2 'two' 1         |
| 3 'three' 3       |
+-------------------+

房屋

id name district_id
1 'h1' 3
2 'h2' 3
3 'h3' 3

所需的输出:

+------------------------------------+
| id name district_id, district_name |
+------------------------------------+
| 1 'h1' 1 'one'                     |
| 2 'h2' 1 'one'                     |
| 3 'h3' 1 'one'                     |
+------------------------------------+
专线小巴

我喜欢为此使用递归with子句。您正在使用的Oracle起始版本11gR2中支持此功能。connect by查询相比,我发现值得学习这种新语法,因为:

  • 它基于标准的SQL规范(所有其他主要数据库在with子句中均支持递归
  • 特定于Oracle的方法更加灵活

考虑:

with cte (id, parent_id, root_id, root_name) as (
    select id, parent_id, id as root_id, name as root_name
    from district
    where parent_id is null
    union all
    select d.id, d.parent_id, c.root_id, c.root_name
    from   cte c
    inner join district d on d.parent_id = c.id
) search depth first by id set order1
select h.id, h.name, c.root_id, c.root_name
from house h
inner join cte c on c.id = h.district_id

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Oracle 11g中执行存储过程

来自分类Dev

如何在Oracle 11g中限制查询结果?

来自分类Dev

如何在Oracle 11g中执行CTE查询

来自分类Dev

如何在Oracle 11G中设置sysdba密码

来自分类Dev

如何在 oracle 11g 中更改几何?

来自分类Dev

如何在Oracle 11g Express Edition中创建新数据库?

来自分类Dev

如何在oracle数据库11g中添加sql文件?

来自分类Dev

如何在 OBIEE 11g 分析中获取前 2 年的数据

来自分类Dev

过滤Oracle 11g层次表

来自分类Dev

如何在Oracle 11g中加密解密图像

来自分类Dev

如何在OSX 10.11.1上安装Oracle 11g?

来自分类Dev

如何在 Oracle 11g 表中从 csv 加载数据中将日期时间截断或转换为日期

来自分类Dev

如何在Oracle 11g中使用context.lookup()获取队列

来自分类Dev

在存储到数据库oracle 11g中的同时获取重复记录

来自分类Dev

如何在Oracle 11g(Application Express Edition)中导出导入数据库?

来自分类Dev

如何在 Windows 8 上为 oracle 11g 创建数据库用户?

来自分类Dev

如何在Oracle 11g中的“选择”查询中添加偏移量?

来自分类Dev

如何在Oracle 11g SQL中的插入查询中插入新行

来自分类Dev

如何在Oracle PL / SQL 11G中声明数字数组

来自分类Dev

如何在C#中编码小写查询oracle 11g?

来自分类Dev

如何在Oracle 11g(Windows 8)中启用分区?

来自分类Dev

如何在oracle 11g中插入印度卢比符号?

来自分类Dev

如何在Oracle PL / SQL 11G中声明数字数组

来自分类Dev

如何在Oracle 11g(Windows 8)中启用分区?

来自分类Dev

如何在 Oracle Service Bus 11g 中启用监控?

来自分类Dev

如何在Oracle 11g中使用XMLAGG函数序列化树数据而不复制带有嵌套结构的XML标记?

来自分类Dev

Oracle数据库中的存储过程(11g)

来自分类Dev

oracle 11g resultSet如何获取表名

来自分类Dev

如何获取数据库表数据(Oracle 11g)作为Json对象并在Android中显示该Json对象?

Related 相关文章

  1. 1

    如何在Oracle 11g中执行存储过程

  2. 2

    如何在Oracle 11g中限制查询结果?

  3. 3

    如何在Oracle 11g中执行CTE查询

  4. 4

    如何在Oracle 11G中设置sysdba密码

  5. 5

    如何在 oracle 11g 中更改几何?

  6. 6

    如何在Oracle 11g Express Edition中创建新数据库?

  7. 7

    如何在oracle数据库11g中添加sql文件?

  8. 8

    如何在 OBIEE 11g 分析中获取前 2 年的数据

  9. 9

    过滤Oracle 11g层次表

  10. 10

    如何在Oracle 11g中加密解密图像

  11. 11

    如何在OSX 10.11.1上安装Oracle 11g?

  12. 12

    如何在 Oracle 11g 表中从 csv 加载数据中将日期时间截断或转换为日期

  13. 13

    如何在Oracle 11g中使用context.lookup()获取队列

  14. 14

    在存储到数据库oracle 11g中的同时获取重复记录

  15. 15

    如何在Oracle 11g(Application Express Edition)中导出导入数据库?

  16. 16

    如何在 Windows 8 上为 oracle 11g 创建数据库用户?

  17. 17

    如何在Oracle 11g中的“选择”查询中添加偏移量?

  18. 18

    如何在Oracle 11g SQL中的插入查询中插入新行

  19. 19

    如何在Oracle PL / SQL 11G中声明数字数组

  20. 20

    如何在C#中编码小写查询oracle 11g?

  21. 21

    如何在Oracle 11g(Windows 8)中启用分区?

  22. 22

    如何在oracle 11g中插入印度卢比符号?

  23. 23

    如何在Oracle PL / SQL 11G中声明数字数组

  24. 24

    如何在Oracle 11g(Windows 8)中启用分区?

  25. 25

    如何在 Oracle Service Bus 11g 中启用监控?

  26. 26

    如何在Oracle 11g中使用XMLAGG函数序列化树数据而不复制带有嵌套结构的XML标记?

  27. 27

    Oracle数据库中的存储过程(11g)

  28. 28

    oracle 11g resultSet如何获取表名

  29. 29

    如何获取数据库表数据(Oracle 11g)作为Json对象并在Android中显示该Json对象?

热门标签

归档