2017-05-30 154 views
0

我有在部門聘請的員工常見的場景:OrientDB:如何返回從第一或第二查詢結果(如果第一個返回行)

  • 僱員的上級部門通過MY_PARENT_IS關係
  • 設置部門對其父部門使用同樣的關係。

特定僱員的經理可以是:

  • 直接設置使用IS_SPECIFIED_LEADER_FOR
  • 被設置爲 IN_CHARGE_PERSON對員工的上級部門
  • 第一人(我們從給定的員工上去結構直到我們找到一個與IN_CHARGE_PERSON關係集的部門)。

結構示例:

Example structure

爲了實現這個目標我有2個疑問:

1查詢來獲取指定的領導者的人:

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) 

問題是如何將這兩個查詢合併到1語句中,該語句將返回第一個或第二個結果的結果,但僅在第一個結果返回沒有結果?

我打得四處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比較?

回答

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)) 
相關問題