select 和遍历的结果不同?

Different results for select and traverse?

我正在使用示例车辆历史数据库对 OrientDb 进行试验,并执行了这两个 SQL 查询,我(本以为)它们是相同的。我正在尝试查找所有将车辆卖给男性的女性。

SELECT expand(out('Bought').in('Sold')[gender="Female"]) FROM Person 
  WHERE gender = "Male" LIMIT = -1

这个returns124条记录。

同时

SELECT FROM ( TRAVERSE in('Sold') FROM (   
  SELECT FROM ( TRAVERSE out('Bought') FROM ( 
    SELECT FROM Person WHERE gender = "Male")
  ) WHERE @class = "Transaction" )) 
WHERE @class = "Person" and gender = "Female" LIMIT = -1

Returns 117 条记录。

我希望有人能向我解释一下区别是什么?

我们在 gitter 上解决了这个问题,但对于其他想知道的人来说 - 发生这种情况是因为第二个查询将删除重复项(因为遍历)但第一个查询不会。

@codemix 是对的,要获得相同的结果,请使用排除重复项的 set():

SELECT FROM (
  TRAVERSE in('Sold') FROM (   
    SELECT FROM (
      TRAVERSE set( out('Bought') ) FROM ( 
        SELECT FROM Person WHERE gender = "Male"
      )
    ) WHERE @class = "Transaction"
  )
) 
WHERE @class = "Person" and gender = "Female" LIMIT = -1