我确实有以下数据库结构。
用户->评论->产品
a。用户和产品是包含一些信息等的顶点:用户名、product_name和。。。。b.注释是包含注释和创建/修改日期的边缘。
为了显示以下结果,sql查询可能是什么样子。
注意:我必须展示所有可能有评论或没有评论的产品。
- product_name、用户名、注释、注释创建日期、注释修改日期
- product_name,用户名,'','','''
- 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的边缘类开始,然后使用let
和unionall()
在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