全部文档
文档中心DeepModel功能DeepQL查询语句子查询

子查询

DeepQL查询语句中的子查询不限制表达式复杂度,可定义在with区块中,也可直接写在查询语句中。这里主要介绍detached表达式,以及通过属性关联对象进行查询的方式

子查询例子

假设共有9个需求,其中4个是DeepModel组件的需求、4个是DeepFlow组件的需求,查询至少有2个需求的组件的需求信息

# 定义子查询:至少有2个需求的组件
with comp_list := (select Component
filter count(.<component[is Requirement]) > 1)

select Requirement {
    req_id,
    req_name,
    component_name := json_get(.component.name, 'zh-cn')
}
filter .component in comp_list

detached表达式例子

直接写在查询语句中的子查询可能会受当前查询范围的限制,主要是查询当前对象。detached表达式类似with区块,相当于在最顶层进行子查询。假设共有9个需求,查询每个需求信息的同时带出需求总数。如下所示,detached表达式效果同with区块,即不受查询范围的限制,可计算出需求实际总数

with count_with := count(Requirement)

select Requirement {
    req_id,
    req_name,
    count := count(Requirement),
    count_detached := count(detached Requirement),
    count_with := count_with
}

属性关联对象例子

如果对象间没有链接,可通过属性关联对象进行查询,效果类似常见的SQL关联(left join)语法,该方式也用于实现计算链接联查模式。例如工作流场景中,通常业务数据会记录对应流程实例的ID,可通过该字段关联流程实例对象,查询流程实例相关信息。如下所示,需求对象Req的属性df_proc_id记录了对应流程实例的ID,可通过该属性匹配流程实例对象DFProcess的主键proc_inst_id,以关联相关流程实例数据,查询流程实例的名称

select Req {
    req_id,
    req_name,
    proc_inst_name := (select DFProcess filter .proc_inst_id = Req.df_proc_id).proc_inst_name
}

回到顶部

咨询热线

400-821-9199

我们使用 ChatGPT,基于文档中心的内容以及对话上下文回答您的问题。

ctrl+Enter to send