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