【问题标题】:OrientDB - LET variable in whereOrientDB - LET 变量在哪里
【发布时间】:2015-05-12 15:19:58
【问题描述】:

我有一个与此非常相似的查询:

SELECT FROM Post 
LET 
$category = (SELECT EXPAND(out('PartOf')) FROM $current),
$poster = (SELECT EXPAND(in('Posted')) FROM $current) 
WHERE 
$poster <> #18:1
AND $poster IN (SELECT EXPAND(out('IsUser')) FROM (SELECT EXPAND(out('Related')) FROM #18:1) WHERE out('RelatedIn') IN ($category))
LIMIT 10000

还有这样的图表:

CREATE CLASS Post EXTENDS V;
CREATE CLASS Category EXTENDS V;
CREATE CLASS User EXTENDS V;
CREATE CLASS UserRelated EXTENDS V;
CREATE CLASS PartOf EXTENDS E;
CREATE CLASS IsUser EXTENDS E;
CREATE CLASS Posted EXTENDS E;
CREATE CLASS Related EXTENDS E;
CREATE CLASS RelatedIn EXTENDS E;

PartOf relates Post and Cateogry
IsUser relates UserRelated and User
Posted relates User and Post
Related relates User and UserRelated
RelatedIn relates UserRelated and Category

UserRelated is an hyper-edge

我要查找的是来自与另一个用户相关的用户 (#18:1) 的帖子,其中用户之间的关系与查询当时正在遍历的帖子的类别属于同一类别。

AND 后的 where 子句不起作用。如果我删除它,查询会给出相同的结果。

另一方面,如果我用特定的@rid 更改该子句中的 $category,查询会完美运行...但我需要多个特定类别。

那么,这个查询有什么问题?

(我希望这个解释足够清楚)

谢谢

【问题讨论】:

    标签: where orientdb let


    【解决方案1】:

    似乎无法从 where 访问 $category。我真的不知道为什么。 但我使用另一个变量解决了它:

    SELECT FROM Post 
    LET 
    $category = (SELECT EXPAND(out('PartOf')) FROM $current),
    $poster = (SELECT EXPAND(in('Posted')) FROM $current),
    $relatedUser = (SELECT EXPAND(out('IsUser')) FROM (SELECT EXPAND(out('Related')) FROM #18:1) WHERE out('RelatedIn') IN ($parent.category))
    WHERE 
    $poster <> #18:1
    AND $poster IN ($relatedUser)
    LIMIT 10000
    

    关键是在子查询中使用 $parent.category。我不太清楚,在任何子查询中,父级中声明的变量是否应该与 $parent.variable 一起使用。

    我希望这对将来的某人有所帮助!

    【讨论】:

    • 这个操作符的目的是什么?
    • '' 运算符表示不相等 ;)
    猜你喜欢
    • 2017-06-10
    • 2020-12-06
    • 1970-01-01
    • 2019-03-14
    • 2019-07-09
    • 2017-11-06
    • 2017-03-26
    • 2010-10-02
    • 1970-01-01
    相关资源
    最近更新 更多