TreeviewCopyright © aleen42 all right reserved, powered by aleen42
YonQL使用指南
注:YonQL的语法类似mysql,本文主要讲解差异及常见操作
一、注意事项
- 主元数据不允许有别名, ⼦元数据必须有别名
- 1, 单表查询, 元数据不允许有别名
- 2, 多表查询, 主元数据不允许有别名, ⼦元数据必须有别名
- 3, ⽬前⽀持left join, inner join, 暂不⽀持right join 示
二、单表查询
2.1、简单查询
注:YonQL简单查询,除了like模糊查询,语法和mysql的基本一致
释义 | 关键字 | 语句(from 后边为数据建模下的实体的URI) | 备注 |
---|---|---|---|
全模糊查询 | like | select new1,new2,new3 from GT22161AT175.GT22161AT175.province where provinceName like '山' | like 不需要加%,会自动转换成 like %山%,如果加上%,会被转义成 %\%山\%% |
左模糊查询 | leftlike | select new1,new2,new3 from GT22161AT175.GT22161AT175.province where provinceName leftlike '河' | like '河%',不需要加% |
右模糊查询 | rightlike | select new1,new2,new3 from GT22161AT175.GT22161AT175.province where provinceName rightlike '东' | like '%东',不需要加% |
2.2、分页查询
注:与mysql的区别:mysql的limit的第一参数是开始获取数据的下标,第二个参数是该下标后要返回数据的条数。没有自动计算分页
分页 | 语法 | 备注 |
---|---|---|
select new1,new2,new3 from GT22161AT175.GT22161AT175.province where dr = 0 order by cityCode asc limit 2,6 | limit page,size (例:8条数据、size是每页6条数、即:一共两页数据。返回page=2 的内容 (dr=0 未删除的数据)) |
三、 多表查询
3.1、前提条件
注:与mysql的区别:它使用的前提是实体之间要有 关联关系,比如主子表或两个元数据之间有单选引用关系 才可以使用
3.2、基于关联关系(主子表)
对主子元数据接口的关联查询
关键字 | 语法 | 备注 | 其他关键字 |
---|---|---|---|
left join | select son_id.main_id.mainCode as mainCode, son_id.main_id.mainName as mainName, son_id.sonCode,son_id.sonName, grandsonCode,grandsonName from GT22161AT175.GT22161AT175.grandson left join son_id son on son_id=son.id left join son_id.main_id main |
1)结果集不能使用t.*,必须写清楚属性名。运行时会报错 2)如果关联关系在元数据中存在,不需要写关联条件 |
left join、left alone join、 inner join、inner alone join、alone join、等 |
var sql = "select son_id.sonCode,son_id.sonName,grandsonCode,grandsonName,son_id.main_id.mainCode as mainCode,son_id.main_id.mainName as mainName from GT22161AT175.GT22161AT175.grandson left join son_id son on son_id=son.id left join son_id.main_id main on son_id.main_id.id =main.id";
var res = ObjectStore.queryByYonQL(sql);
3.3、基于引用关系(引用参照)
实体1:党组织
实体2:党员
党员中的一个字段 单选引用 党组织。
// 入参:党组织名称
var mecName = request.mecName;
// 根据入参党组织查询该党组织下所有党员数据
var sql = "select dangzuzhiid.jianchen,xingming,rudangriqi,xueli from GT27287AT208.GT27287AT208.zs_Members left join dangzuzhiid d on dangzuzhiid = d.id where dangzuzhiid.jianchen = '"+ mecName + "' " //+ mecName ;
var res = ObjectStore.queryByYonQL(sql)
四、常见问题
4.1.自建表和系统表是否支持关联查询?
自建和系统表 不支持 关联查询;
因为YonQL查询时,其实是需要传domainKey参数的,比如:
ObjectStore.queryByYonQL(sql,"developplatform")
只不过,标准版自建表的查询第二个参数是“developplatform”可以省略;但原厂表查询时,必须传第二个参数(领域的domainKey) 。
如果业务上有这种场景,系统表和自建表可以分开查询
4.2.跨领域原厂表是否支持关联查询?
不同领域domainKey不一致,ObjectStore.queryByYonQL(sql,"developplatform") 只支持传一个领域, 不同领域的表也不在一个库中所以不支持。
4.3.原厂单据domainKey如何获取?
举例:F12查看请求,从header中可以找到对应单据所在领域的domainkey