在orientDB中编写子查询

Sun*_*560 6 orientdb

这是我现在正在使用的查询:

INSERT INTO details SET name = "INITIALIZE",actionMap ={"1":12:1,"2":12:2};
Run Code Online (Sandbox Code Playgroud)

这里12:1,12:2是从另一个表摆脱.我面临很多问题的硬编码这些摆脱的价值.为了避免这个我想添加这样的查询

INSERT INTO details SET name = "INITIALIZE",actionMap ={"1":(select @rid from action where start is not null),"2":(select @rid from action where stop is not null)};
Run Code Online (Sandbox Code Playgroud)

我得到了这个例外:

com.orientechnologies.orient.core.exception.OValidationException:字段'details.actionMap'已声明为LINKMAP,但该值不是记录或记录ID

那么如何更改我的查询以帮助我的案例.

mit*_*ken 2

这确实可以使用批处理以更优雅的方式完成。

这只是为了创建你想要的对象

INSERT INTO details SET name = "INITIALIZE"
Run Code Online (Sandbox Code Playgroud)

我们将把它变成

let $inserted = INSERT INTO details SET name = "INITIALIZE"
Run Code Online (Sandbox Code Playgroud)

并添加您想要添加的边缘:

CREATE EDGE actionMap FROM $inserted TO (SELECT FROM action WHERE start is not null )
CREATE EDGE actionMap FROM $inserted TO (SELECT FROM action WHERE stop is not null )
Run Code Online (Sandbox Code Playgroud)

所以你必须运行的整个批次是

let $inserted = INSERT INTO details SET name = "INITIALIZE"
CREATE EDGE actionMap FROM $inserted TO (SELECT FROM action WHERE start is not null )
CREATE EDGE actionMap FROM $inserted TO (SELECT FROM action WHERE stop is not null )
Run Code Online (Sandbox Code Playgroud)

如果您对此还有任何疑问,请随时询问。