OrientDB:如何 return 来自第一个或第二个查询的结果(如果第一个 return 没有行)

OrientDB: How to return results from first or second query (if first returned no rows)

我与部门雇员有一个共同的场景:

特定员工的经理可以是:

示例结构:

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

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

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)

第二个查询找到结构中的第一个经理 (IN_CHARGE_PERSON)

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)

问题是如何将这 2 个查询组合成 1 个语句,该语句要么 return 来自第一个查询或第二个查询,但前提是第一个 return 没有结果?

我玩过 LET,但无法 100% 正常工作(这导致查询解析错误):

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))

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

OK,解决了,原来是我漏了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))