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
我正在使用示例车辆历史数据库对 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