orientdb sql запрос для выбора свойства ребер и полей вершин.

У меня есть следующая структура базы данных.

пользователи -> комментарий -> продукты

а. пользователи и продукты - это вершины, содержащие некоторую информацию и т. д.: user_name, product_name и.... b. комментарий - это край, который содержит комментарий и дату создания / изменения.

как может выглядеть sql-запрос, чтобы показать следующий результат.

Примечание: я должен показать все продукты, которые могут иметь или не иметь комментарий.

  1. product_name, user_name, comment, comment_created_date, comment_modified_date
  2. имя_продукта, имя_пользователя, '', '', ''
  3. product_name, user_name, comment, comment_created_date, comment_modified_date

3 ответа

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с Comments, затем используйте let а также unionall() добавить неCommentиздание Productс до expand()ING:

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 поле питается nulls из первого запроса (т. е. из $a набор результатов) и с Product из второго запроса ($b набор результатов)

Используя схему @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
Другие вопросы по тегам