我正在尝试使用示例车辆历史数据库的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条记录。
我希望有人可以向我解释有什么区别?
答案 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