OrientDB:如何从第一个或第二个查询返回结果(如果第一个查询没有返回任何行)

OrientDB:如何从第一个或第二个查询返回结果(如果第一个查询没有返回任何行),orientdb,graph-databases,orientdb2.2,Orientdb,Graph Databases,Orientdb2.2,我与受雇于部门的员工有一个共同的情况: 员工的上级部门由MY\u parent\u IS关系设置 部门对其上级部门使用相同的关系 特定员工的经理可以是: 直接使用设置是否指定了\u LEADER\u用于 在员工的上级部门上设置为负责人\u person的第一个人(我们从给定的员工向上移动结构,直到找到一个关系集为负责人\u person的部门) 示例结构: 为了实现这一目标,我有两个问题: 获取人员的指定领导的第一个查询: SELECT expand(manager) FROM (MA

我与受雇于部门的员工有一个共同的情况:

  • 员工的上级部门由
    MY\u parent\u IS
    关系设置
  • 部门对其上级部门使用相同的关系
特定员工的经理可以是:

  • 直接使用
    设置是否指定了\u LEADER\u用于
  • 在员工的上级部门上设置为
    负责人\u person
    的第一个人(我们从给定的员工向上移动结构,直到找到一个关系集为
    负责人\u person
    的部门)
示例结构:

为了实现这一目标,我有两个问题:

获取人员的指定领导的第一个查询:

SELECT expand(manager) FROM (MATCH {class:HRUnitPersonCompany, 
          where: (Name = 'Sales Berseker 1' AND in('IS_SPECIFIED_LEADER_FOR').size() > 0)}.in('IS_SPECIFIED_LEADER_FOR')
          {as: manager} RETURN manager)
第二次查询查找结构上的第一位经理(
负责人

问题是如何将这两个查询组合成一个语句,该语句将返回第一个或第二个查询的结果,但仅在第一个查询未返回结果的情况下才返回

我使用了LET,但无法使其100%正常工作(这会导致查询解析错误):


问题在于这种情况,当我删除比较时,至少没有报告错误,但它没有按预期工作。为什么我不能在if语句中使用
.size()>0
比较?

好的,解决了,结果我错过了eval(),没有读到eval的内容必须放在引号之间。 工作查询如下:

SELECT EXPAND(if(eval('$specMgr.size() > 0'),$specMgr,$depMgr))
LET $specMgr = (SELECT expand(manager) FROM (MATCH {class:HRUnitPersonCompany, 
          where: (Name = 'Sales Berseker 1' AND in('IS_SPECIFIED_LEADER_FOR').size() > 0)}.in('IS_SPECIFIED_LEADER_FOR')
          {as: manager} RETURN manager)),
$depMgr = (SELECT expand(manager) FROM (MATCH {class:HRUnitPersonCompany, 
          where: (Name = 'Sales Berseker 1')}.out('MY_PARENT_IS')
          {while: (out('IN_CHARGE_PERSON').size() == 0), 
          where: (out('IN_CHARGE_PERSON').size() > 0)}.out('IN_CHARGE_PERSON')
          {as: manager} RETURN manager))
SELECT if($specMgr.size()>0,$specMgr,$depMgr)
LET $specMgr = (SELECT expand(manager) FROM (MATCH {class:HRUnitPersonCompany, 
          where: (Name = 'Sales Berseker 1' AND in('IS_SPECIFIED_LEADER_FOR').size() > 0)}.in('IS_SPECIFIED_LEADER_FOR')
          {as: manager} RETURN manager)),
$depMgr = (SELECT expand(manager) FROM (MATCH {class:HRUnitPersonCompany, 
          where: (Name = 'Sales Berseker 1')}.out('MY_PARENT_IS')
          {while: (out('IN_CHARGE_PERSON').size() == 0), 
          where: (out('IN_CHARGE_PERSON').size() > 0)}.out('IN_CHARGE_PERSON')
          {as: manager} RETURN manager))
SELECT EXPAND(if(eval('$specMgr.size() > 0'),$specMgr,$depMgr))
LET $specMgr = (SELECT expand(manager) FROM (MATCH {class:HRUnitPersonCompany, 
          where: (Name = 'Sales Berseker 1' AND in('IS_SPECIFIED_LEADER_FOR').size() > 0)}.in('IS_SPECIFIED_LEADER_FOR')
          {as: manager} RETURN manager)),
$depMgr = (SELECT expand(manager) FROM (MATCH {class:HRUnitPersonCompany, 
          where: (Name = 'Sales Berseker 1')}.out('MY_PARENT_IS')
          {while: (out('IN_CHARGE_PERSON').size() == 0), 
          where: (out('IN_CHARGE_PERSON').size() > 0)}.out('IN_CHARGE_PERSON')
          {as: manager} RETURN manager))