orientedb-sql查询以选择边和顶点字段属性



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

用户->评论->产品

a。用户和产品是包含一些信息等的顶点:用户名、product_name和。。。。b.注释是包含注释和创建/修改日期的边缘。

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

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

  1. product_name、用户名、注释、注释创建日期、注释修改日期
  2. product_name,用户名,'','','''
  3. product_name、用户名、注释、注释创建日期、注释修改日期
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

查询时不能"联接"类/表。相反,合并结果集->从Product s和Comment s的边缘类开始,然后使用letunionall()expand() ing之前添加非Comment ed Product s:

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字段将输入来自第一个查询(即来自$a结果集)的null s和来自第二个查询($b结果集)的Product

使用@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

最新更新