选择和遍历的结果不同?

时间:2015-02-23 21:12:19

标签: orientdb

我正在尝试使用示例车辆历史数据库的OrientDb并执行了这两个SQL查询,我认为这些查询是相同的。我试图找到所有将车辆卖给男性的女性。

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

这一条记录返回124条记录。

虽然

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

返回117条记录。

我希望有人可以向我解释有什么区别?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

@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