`
datamachine
  • 浏览: 163385 次
社区版块
存档分类
最新评论

简化SQL式计算之多级关联

    博客分类:
  • DB
阅读更多

SQLjoin语句比较抽象,只适合表达较简单的关联关系,一旦关联的层级较多,相应的代码就会变得很复杂。集算器可以用对象引用表达关联关系,代码更加直观,下面用一个例子来说明。

  表channel存储着某网站所有的频道及其上级频道的对应关系,分别用idparent字段来表示,最多四级,其中root代表网站本身(即根节点)。请根据输入参数列出某频道的下一级、下两级、下三级频道的名字,用逗号分隔。表channel中的部分数据如下:



 

集算器代码:



 

A1:查询表channel,命名为data,部分结果如下:



 

B1=data.switch(parent,data:id),这句代码用来建立自连接。代码中使用了函数switch,它作用是将parent字段切换成data中对应的记录,如下图所示:



 

切换后,可以直接用parent.id来表示上级频道,parent.parent.parent.id则表示上三级频道。SQL可以用join来表示这种自连接,但层级一多就会混乱。

A2=create(id,level,sub),这句代码建立了一个空序表,用来存储最终的计算结果。与显式定义的变量data不同,格名A2就是这个序表的默认变量名。A2的当前值如下:



 

A3=data.select(parent.id==arg1 ),这句代码从data中查询出上级频道等于参数arg1的记录,即:arg1的下一级频道。其中arg1是事先定义的外部参数,可以来自JAVA或报表。假如参数arg1的值为p1,则A3的计算结果如下:



 

B3=A2.insert(0,arg1,1,A3.(name).string()),这句代码在A2中追加一条记录,第一个字段值是arg1(假设是p1);第二个字段值为1,表示第一级子频道;第三个字段为表达式A3.(name).string(),这表示取出A3中的列name,拼成逗号分隔的字符串。计算结果如下:



 

A4=data.select(parent.parent.id==arg1),这句代码和A3类似,表示从data查询出arg1的下两级频道。结果如下:



 

A5A4类似,表示取出arg1的下三级频道。用类似的办法可以轻松取出下N级的频道。

B4B5B3类似,都是向A2中追加新记录,只是level字段改为23。执行完B5后,A2就是本次运算的最终结果:



 

刚才参数arg1的值为p1,如果输入c11,则计算结果如下:



 

有时我们希望看到更清晰的数据,比如将某个频道的所有下级频道一条条列出,并标出层级关系。要想实现这种算法,可以使用下面的代码:



 

红色字体为变动后的代码,其中B3中的代码是=A2.insert(0,arg1,1,A3),这表示直接将A3的记录存储在A2中,假设参数arg1的值为p1,则计算结果如下:



 

点开sub字段,可以看到详细的记录:



 

可以看到,集算器的字段值是泛型的,可以存储记录组,或者单条记录。值得注意的是,函数switch的本质就是将外键切换为主表中的单条记录。

执行完B5后,A2中的结果如下:



 

A6=A2.(~.sub.new(A2.id,A2.level,id:subid,name)),这句代码用来将A2idlevel拼到sub字段里的每条记录中。其中A2.()表示对A2进行计算,计算中可以使用“~”来表示A2中的每条记录,~.sub则表示每条记录的sub字段(记录组)。函数new用来生成新的序表,即:A2中的id字段、level字段,sub中的id字段、name字段。计算完成后,A6的值如下:



 

A7=A6.union(),这句代码用来将A7的各组记录拼在一起,形成最终计算结果:



 

有时我们需要直接列出每个频道的所有下级频道,而不是使用参数。要想实现这种算法,可以使用集算器的for语句,代码如下:



 

A3中的代码for data.(id)表示循环dataid字段,每次取出一条,可以用循环语句所在的单元格A3来表示循环变量。循环的作用范围可以用缩进来表示,即B 4-C6。最终的计算结果在A8中,部分数据如下:



 

另外,集算器可被报表工具或java程序调用,调用的方法也和普通数据库相似,使用它提供的JDBC接口即可向java主程序返回ResultSet形式的计算结果,具体方法可参考相关文档。

  • 大小: 52.6 KB
  • 大小: 45.7 KB
  • 大小: 20.9 KB
  • 大小: 42.7 KB
  • 大小: 2.8 KB
  • 大小: 12.4 KB
  • 大小: 10.2 KB
  • 大小: 38.9 KB
  • 大小: 31.5 KB
  • 大小: 28.7 KB
  • 大小: 55.2 KB
  • 大小: 4.8 KB
  • 大小: 19.6 KB
  • 大小: 12.9 KB
  • 大小: 71 KB
  • 大小: 54.2 KB
  • 大小: 57.2 KB
  • 大小: 40.2 KB
1
0
分享到:
评论

相关推荐

    基于mybatis的collection标签实现帖子评论多级回复以及关联用户信息查询

    总之,基于MyBatis的`collection`标签,结合适当的SQL查询和结果映射,我们可以高效地处理帖子评论的多级回复和用户信息的关联查询。这种设计模式具有高度的可移植性,可以应用于各种需要处理嵌套数据结构的业务场景...

    全国地区信息数据.sql关联坐标+邮政编码+汉子拼音+拼音缩写

    全国地区信息数据.sql关联坐标+邮政编码+汉子拼音+拼音缩写这个资源是关于中国各地的全面信息数据库,特别适用于需要处理地理位置、邮政服务以及汉字转换的IT项目。这个数据库包含两个主要的SQL文件:geo.sql和省市...

    ajax多级联动菜单

    【Ajax多级联动菜单】是一种常见的前端交互设计,它允许用户在选择某个菜单项时,自动更新下一级菜单的内容,以此类推,实现多级菜单之间的动态关联。这种技术广泛应用于网页表单填写、筛选器等场景,为用户提供更加...

    SQL SERVER 2005加密技术

    SQL Server 2005作为微软“可信赖计算”计划下的首款重要产品,显著提升了数据安全性,特别是其新增的数据加密特性,为应用程序开发者提供了强有力的安全保障。本文旨在深入探讨SQL Server 2005的数据加密技术,及其...

    省市县乡多级联动行政区划数据库,多版本

    省市县乡多级联动行政区划数据库是用于存储国家或地区各级行政区域信息的重要工具,它在信息化建设中扮演着关键角色。这样的数据库通常包括不同级别的行政区域数据,如国家、省份、城市、县(区)、乡镇(街道)等,...

    父子结点树转化为多级编码探讨与研究

    - **单条 SQL 语句实现转换**: 本文介绍了一种通过一条 SQL 语句来实现从父子结点关联到多级编码转换的方法。这种方法极大地简化了操作流程,提高了效率和可靠性。 #### 3. 转换实现原理 - **树形结构的理解**: ...

    SQL Server 2005数据加密技术浅析.pdf

    SQL Server 2005采用了多级密钥体系来保护内部的密钥和数据。如图1所示,每个密钥或服务都有一个保护它的上级密钥,形成一个层级结构。服务主密钥保护数据库主密钥,数据库主密钥再保护证书和非对称密钥,从而形成一...

    三级联动SQL语句及sql表

    这种联动机制常见于多级分类、地区选择等场景。例如,一个商品分类可能包括大类、中类和小类,选择大类后,中类和小类会根据大类的改变而变化。 SQL(Structured Query Language)是用于管理和操作关系型数据库的...

    PL_SQL用户指南与参考.doc

    ### PL/SQL用户指南与参考知识点详述 #### 第一章 PL/SQL一览 ##### 一、理解PL/SQL的主要特性 **1、块结构** PL/SQL采用块结构来组织程序代码,主要包括三个部分:**声明部分**、**执行部分**以及**异常处理部分...

    SQL-Server-2000--整套课件完整版电子教案课件汇总2.pptx

    1. **图形化管理**:SQL Server Enterprise Manager提供了一个直观的图形用户界面,简化了数据库的管理和监控。 2. **丰富的编程接口**:支持多种开发工具,如DB-Library for C、Transact-SQL、嵌入式SQL、ODBC和OLE...

    jquery多级菜单复杂权限设置系统

    在IT行业中,构建一个高效的用户界面是至关重要的,特别是对于具有多级结构和复杂权限管理的应用程序。"jQuery多级菜单复杂权限设置系统"正是这样一个解决方案,它利用jQuery的灵活性和强大功能,为用户提供直观、...

    PL-SQL用户指南与参考(译)

    ### PL-SQL用户指南与参考(译) #### 第一章:PL/SQL一览 ##### 一、理解PL/SQL的主要特性 **1、块结构** PL/SQL使用块结构来组织程序,每个块可以独立运行,也可以组合在一起形成更复杂的程序结构。一个基本的...

    HANA java script

    从给定的文件信息来看,主要讨论的是SAP HANA SQLScript的相关知识点,这与JavaScript并没有直接关联,但为了满足题目要求,我们将基于文件提供的信息深入解析SAP HANA SQLScript的重要概念和技术细节。 ### SAP ...

    中国城市三级级联表sql文件 mysql

    这样的设计减少了表的数量,简化了关系,但可能导致查询复杂度上升,特别是当需要进行多级级联查询时。 另一个可能的情况是,这两个文件分别代表了两种不同的数据结构,比如一种是分表设计,将省、市、区分别存储在...

    里诺合同管理(SQL)V3.60网络版

    3. **流程审批**:合同的签署通常需要经过多级审批,系统内置了审批流程管理,支持自定义审批流程,可设置电子签名,简化纸质文档的流转,提高工作效率。 4. **提醒与预警**:系统具备自动提醒功能,例如合同到期、...

    JEECG 开发指南v3.6.pdf )

    - **一对多的代码生成**:在处理多表关联时,JEECG 提供了一对多代码生成器,可以自动生成关联表的 CRUD 操作以及相应的前端页面展示逻辑,简化了多表联合查询的开发工作。 - **在线表单开发**:利用 JEECG 的在线...

    ajax 多级联动数据库版(带后台和省市县数据库)

    **Ajax 多级联动数据库版概述** Ajax,全称Asynchronous JavaScript and XML,是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。在本项目中,"Ajax 多级联动数据库版(带后台和省市县数据库)"是...

    SQL Server数据库的安全访问控制研究.pdf

    本文针对SQL Server数据库的安全访问控制进行了深入的研究,首先概述了数据库的访问控制策略以及BLP模型,并分析了角色访问控制模型(RBAC),在此基础上提出了一种改进的角色访问控制模型ERBAC-M。研究重点在于如何在...

    省市县三级联动DB2完整数据库sql语句

    在IT行业中,数据库管理是至关重要的,特别是在处理地理信息系统或者涉及多级行政区域的数据时。DB2是一款由IBM开发的高性能、企业级的关系型数据库管理系统(RDBMS),广泛应用于各种规模的企业。在这个"省市县三级...

Global site tag (gtag.js) - Google Analytics