【问题标题】:OrientDB select unique Vertices from multiple EdgesOrientDB 从多个边中选择唯一的顶点
【发布时间】:2016-05-21 19:57:49
【问题描述】:

我有 2 个顶点 User 和 Stamp。顶点由三个边 Have、WishToHave 和 Selling 关联。

我希望选择与用户有任何关系的独特邮票。为此,我正在运行以下命令:

select expand(out('Have', 'WishToHave', 'Selling')) from #12:0

这个命令的问题是它返回 'Stamp1' 几次,因为它有 Have 和 Selling 边缘。

如何选择与 User1 相关的所有唯一/不同的 Stamp?

为这个例子初始化测试数据:

create class User extends V
create class Stamp extends V

create class Have extends E
create class WishToHave extends E
create class Selling extends E

create vertex User set name = 'User1'
create vertex Stamp set name = 'Stamp1'
create vertex Stamp set name = 'Stamp2'
create vertex Stamp set name = 'Stamp3'


create edge Have from (select from User where name = 'User1') to (select from Stamp where name = 'Stamp1')
create edge WishToHave from (select from User where name = 'User1') to (select from Stamp where name = 'Stamp2')
create edge Selling from (select from User where name = 'User1') to (select from Stamp where name = 'Stamp1')
create edge Selling from (select from User where name = 'User1') to (select from Stamp where name = 'Stamp3')

【问题讨论】:

    标签: orientdb graph-databases


    【解决方案1】:

    我用你的结构试过你的情况:

    要检索唯一顶点,您可以使用DISTINCT() 函数。我可以举两个例子:

    查询 1:在目标查询中使用 EXPAND()

    SELECT EXPAND(DISTINCT(@rid)) FROM (SELECT EXPAND(out('Have', 'WishToHave', 'Selling')) FROM #12:0)
    

    输出:

    查询 2:在目标查询中使用 UNWIND

    SELECT EXPAND(DISTINCT(out)) FROM (SELECT out('Have', 'WishToHave', 'Selling') FROM #12:0 UNWIND out)
    

    输出:

    希望对你有帮助

    【讨论】:

    • 非常感谢。这正是我想要的。
    • 嗨@TWeb,很高兴能提供帮助。
    猜你喜欢
    • 2018-06-09
    • 2018-04-30
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多