orientdb sql查询选择边和顶点字段属性。

时间:2015-02-16 03:27:45

标签: sql orientdb edge vertex

我确实有以下数据库结构。

用户 - >评论 - >产品

一个。用户和产品是包含一些信息等的顶点:user_name,product_name和.... 湾comment是包含注释和创建/修改日期的边缘。

为了显示以下结果,sql查询可能是什么样子。

注意:我必须显示可能有或没有评论的所有产品。

  1. product_name,user_name,comment,comment_created_date,comment_modified_date
  2. product_name,user_name,'','',''
  3. product_name,user_name,comment,comment_created_date,comment_modified_date

3 个答案:

答案 0 :(得分:4)

create class User extends V
create property User.name string

create class Product extends V
create property Product.name string

create class Comment extends E
create property Comment.comment string
create property Comment.createDate datetime
create property Comment.modifiedDate datetime


create vertex User set name = 'u1' # 12:0
create vertex Product set name = 'p1' # 13:0
create vertex Product set name = 'p2' # 13:1

create edge Comment from #12:0 to #13:0 set comment = 'nice product', createDate = sysdate()

如果以上是您的情况,我相信您正在寻找的查询类似于:

select *, expand(inE('Comment')) from Product

<强>更新

它不是很漂亮,但作为一种解决方法,您可以使用:

select *, inE('Comment').include('comment', 'createDate', 'modifiedDate') from Product

答案 1 :(得分:1)

查询时无法“加入”类/表。相反,合并结果集 - &gt;从Product s的Comment s的边缘类开始,然后使用letunionall()添加非Comment ed Product s在expand()之前:

select expand($c)
let $a = (select in.name as name, out.name as User, comment, createDate, modifiedDate from Comment),
    $b = (select from Product where in_Comment is null),
    $c = unionall($a, $b)

请注意,在结果集中,您将从第一个查询(即@CLASS结果集)和{{1}获得null$a字段来自第二个查询(Product结果集)

答案 2 :(得分:0)

使用@vitorenesduarte模式,以下查询可能符合当前要求

select name AS product_name,in(comment).name 
            AS user_name,inE(comment).comment
            AS comment,inE(comment).createDate
            AS comment_created_date,inE(comment).modifiedDate
            AS comment_modified_date from product