J'ai un scénario commun avec les employés travaillant dans les départements:OrientDB: Comment retourner les résultats de la première ou de la deuxième requête (si le premier n'a renvoyé aucune ligne)
-
employé
- a son département parent fixé par
MY_PARENT_IS
relation - la même relation est utilisée par les ministères contre leurs ministères d'attache.
Le gestionnaire d'un employé en particulier peut être:
- situé directement à l'aide
IS_SPECIFIED_LEADER_FOR
- première personne qui est définie comme
IN_CHARGE_PERSON
sur le département des parents de l'employé (nous remontons la structure de l'employé donné jusqu'à ce que nous trouvions un département avecIN_CHARGE_PERSON
ensemble de relations).
Exemple de structure:
Pour atteindre cet objectif, j'ai 2 requêtes:
1ère requête pour obtenir spécifié chef de file pour la personne:
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)
2ème requête trouve premier responsable de la structure (IN_CHARGE_PERSON
)
La question est de savoir comment combiner ces 2 requêtes en une instruction qui retournera les résultats du premier ou du second, mais seulement si le premier n'a donné aucun résultat?
J'ai joué avec LET mais ne peut pas obtenir ce travail 100% (ce qui jette erreur d'analyse de requête):
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))
Le problème est à la condition, lorsque je retire la comparaison, au moins aucune erreur est signalé mais cela ne fonctionne pas comme prévu. Pourquoi ne puis-je pas utiliser la comparaison .size() > 0
dans l'instruction if?