数据库对层次结构的处理模型有好多种,可以根据自己的需求来设计模型,当然最简单的也是最容易设计的模型就是所谓的邻接模型。在这方面,其他数据库比如Oracle提

数据库对层次结构的处理模型有好多种,可以根据自己的需求来设计模型,,当然最简单的也是最容易设计的模型就是所谓的邻接模型。在这方面,其他数据库比如Oracle 提供了现成的分析方法 connect by,而MySQL在这方面就显得有些薄弱了。 不过可以用MySQL的存储过程实现ORACLE类似的分析功能

这样,先来创建一个简单的数表。create table country ( id number(2) not null, name varchar(60) not null);

create table country_relation (id number(2), parentid number(2));

插入一些数据-- Table country.

insert into country (id,name) values (0,'Earth');

insert into country (id,name) values (2,'North America');

insert into country (id,name) values (3,'South America');

insert into country (id,name) values (4,'Europe');

insert into country (id,name) values (5,'Asia');

insert into country (id,name) values (6,'Africa');

insert into country (id,name) values (7,'Australia');

insert into country (id,name) values (8,'Canada');

insert into country (id,name) values (9,'Central America');

insert into country (id,name) values (10,'Island Nations');

insert into country (id,name) values (11,'United States');

insert into country (id,name) values (12,'Alabama');

insert into country (id,name) values (13,'Alaska');

insert into country (id,name) values (14,'Arizona');

insert into country (id,name) values (15,'Arkansas');

insert into country (id,name) values (16,'California');-- Table country_relation.

insert into country_relation (id,parentid) values (0,NULL);

insert into country_relation (id,parentid) values (2,0);

insert into country_relation (id,parentid) values (3,0);

insert into country_relation (id,parentid) values (4,0);

insert into country_relation (id,parentid) values (5,0);

insert into country_relation (id,parentid) values (6,0);

insert into country_relation (id,parentid) values (7,0);

insert into country_relation (id,parentid) values (8,2);

insert into country_relation (id,parentid) values (9,2);

insert into country_relation (id,parentid) values (10,2);

insert into country_relation (id,parentid) values (11,2);

insert into country_relation (id,parentid) values (12,11);

insert into country_relation (id,parentid) values (13,11);

insert into country_relation (id,parentid) values (14,11);

insert into country_relation (id,parentid) values (15,11);

insert into country_relation (id,parentid) values (16,11);

在Oracle 里面,对这些操作就比较简单了,都是系统提供的。

比如下面四种情形:

1). 查看深度,select max(level) "level" from COUNTRY_RELATION a start with a.parentid is NULL

connect by PRIOR a.id = a.PARENTID

order by level;

level

----------

4

已用时间: 00: 00: 00.03

2). 查看叶子节点select name from

(

select b.name, connect_by_isleaf "isleaf"

from COUNTRY_RELATION a inner join country b on (a.id = b.id)

start with a.parentid is NULL connect by prior a.id = a.PARENTID

) T where T."isleaf" = 1;

NAME

--------------------------------------------------

Canada

Central America

Island Nations

Alabama

Alaska

Arizona

Arkansas

California

South America

Europe

Asia

Africa

Australia

已选择13行。

已用时间: 00: 00: 00.01

3) 查看ROOT节点select connect_by_root b.name

from COUNTRY_RELATION a inner join country b on (a.id = b.id)

start with a.parentid is NULL connect by a.id = a.PARENTID

CONNECT_BY_ROOTB.NAME

--------------------------------------------------

Earth

已用时间: 00: 00: 00.01

4). 查看路径select sys_connect_by_path(b.name,'/') "path"

from COUNTRY_RELATION a inner join country b on (a.id = b.id)

start with a.parentid is NULL connect by prior a.id = a.PARENTID

order by level,a.id;

path

--------------------------------------------------

/Earth

/Earth/North America

/Earth/South America

/Earth/Europe

/Earth/Asia

/Earth/Africa

/Earth/Australia

/Earth/North America/Canada

/Earth/North America/Central America

/Earth/North America/Island Nations

/Earth/North America/United States

/Earth/North America/United States/Alabama

/Earth/North America/United States/Alaska

/Earth/North America/United States/Arizona

/Earth/North America/United States/Arkansas

/Earth/North America/United States/California

已选择16行。

已用时间: 00: 00: 00.01

接下来我们看看在MySQL 里面如何实现上面四种情形:

前三种都比较简单,可以很容易写出SQL。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

oracle 邻接模型,【原创】MySQL 模拟Oracle邻接模型树形处理相关推荐

  1. mysql和oracle转换_转MySql 与Oracle区别

    http://blog.sina.com.cn/s/blog_61e034d50100k6xn.html 近期突击学习了mysql,应杨毅的邀请,简单比较一下mysql和oracle的差别,不当之处欢 ...

  2. mysql和oracle的通用存储,MySQL与Oracle在使用上的一些区别

    1.mysql与oracle数据库实现自增列的区别: mysql可以实现自增列,只要在建表时设置auto_increment即可,而oracle在建表时不能设置自增列功能, 必须通过sequence序 ...

  3. MySQL模拟oracle的connect by

    新建tb_dic_level表,里面只有一个字段id,用来保存1-100的数据, 新建一个存储过程批量往tb_dic_level插入数据 begin declare num int default 0 ...

  4. oracle 按照字母排序,MySQL、Oracle、DB2等数据库常规排序、自定义排序和按中文拼音字母排序...

    MySQL常规排序.自定义排序和按中文拼音字母排序,在实际的SQL编写时,我们有时候需要对条件集合进行排序. 下面给出3中比较常用的排序方式,mark一下 1.常规排序ASC DESC ASC 正序 ...

  5. 自己写cache server之网络框架处理——对比mysql、Oracle(上)

    Jack:hi,淫龙.急救. 我:周末了,在碎懒觉. Jack:老板让我自己写个高性能的Cache数据库.你知道的,这个有多难.一时半会儿哪写得出来. 我:慢慢写吧.这玩意儿一时半会儿写不出来的. J ...

  6. mysql 读取oracle_RobotFramework读取mysql和oracle数据库

    一.robotframework连接mysql数据库 1.安装databaselibrary.pymysql 通过cmd命令执行:pip install robotframework-database ...

  7. Mysql创建自增序列方案(模拟Oracle序列)

    Mysql实现自增序列 mysql自带了自增序列,为了方便通过数据库获取唯一的增长序列满足业务需求,模拟oracle序列完成序列获取方案:为了达到oracle序列的效果,在mysql创建函数来完成模拟 ...

  8. Java List排序 java ListMap 排序 Java listmap 模拟 oracle 排序 Java listmap 模拟 mysql 排序

    Java List排序 java ListMap 排序 Java listmap 模拟 oracle 排序 Java listmap 模拟 mysql 排序 一.概述 近期的开发工作中,遇到一个需求: ...

  9. 求职知识整理一(前后端分离,前端模式,数据库知识点:sql,MySQL,Oracle,jdbc)

    目录 今日事: 1.前后端分离(常见的是前端写静态页面,后端套用模板) 2.前端开发中的MVC/MVP/MVVM模式 一.数据库(MySql,Oracle,SQL Server)(基本的数据库操作语句 ...

最新文章

  1. mysql备份策略的制定
  2. Sencha Touch 开发入门
  3. iphone闪退修复工具_苹果中国回应iPhone致命漏洞:不予置评
  4. html二级导航栏随一级居中,html – 1.在css中链接不起作用2.如何垂直居中导航栏并在每个导航栏上添加填充...
  5. 给zuul网关添加过滤器
  6. python如何复制一个变量_Python中变量、赋值、浅拷贝、深拷贝
  7. ajax调用后台java类_ajax调用java后台方法是什么
  8. mysql锁机制 php_MySQL锁机制和PHP锁机制
  9. 【tool】firewall防火墙
  10. 基于单机hdfs安装hive
  11. Tensorflow图像处理以及数据读取
  12. 日报系统、周报系统如何便捷使用?——领导篇
  13. 整人游戏-色盲在线测试
  14. Godot GUI探讨
  15. html缩放背景不缩放_缩放并不可怕。
  16. Linux 查看本地ip
  17. 如何在HTML页面中引入一首网易云音乐以及B站的视频
  18. 也谈地方门户网站运营
  19. PT静态时序分析 第一课 第二课
  20. 微慕小程序开源美化版

热门文章

  1. 项目学生:Spring数据的持久性
  2. JArchitect对Java开源贡献者免费
  3. 编写Maven插件的提示
  4. Java RESTful API集成测试
  5. 从JavaFX 1.3迁移到JavaFX 2.0
  6. Eclipse:如何附加Java源代码
  7. 会议室分配时间最长_论文导论动态任务分配GPU上图计算的高效处理方式
  8. IntelliJ IDEA for Windows 默认模式下的快捷键
  9. 7445 oracle,Oracle 10g impdp 报 ORA-7445 [_INTEL_FAST_MEMCPY.A] 解决方法
  10. 电脑运行adb闪退_adb+python进阶使用