OrientDB:如何使用 select 查询更新列

OrientDB: How to update column using select query

我需要使用以下内容更新 table 中的一列:

update Table1 set name = (select productName from Table2 where
@rid=$parent.$current.productid)

查询工作正常,但不是名称查询,而是以“[productname]”格式存储值。

我已经阅读了orientdb文档,我猜select查询returns结果是集合格式。所以我已经尝试了以下功能

提前致谢。

我尝试搜索但没有得到任何干净的答案,但我进行了以下更改对我有用并完成了工作:)

update Table1 set name=(select productname from Table2 where
@rid=$parent.$current.productid), 
name= name.replace("\[","").replace("\]","")

希望这能为某人节省时间。

您观察到此行为,因为子查询(select 查询)总是 returns 一个集合。 LET 块会在这里帮助你。以下是您如何在查询中使用 LET 块;

update Table1 set name = $name[0].productname LET $name = (select productname from Table2 where @rid=$parent.$current.productId)

LET 块对于将多次使用的子查询、投影和保存结果很有用。

您可以找到更多信息here

希望对您有所帮助。

显然您的回答 (@Omega Silva) 无法正常工作。

This is the error I get

我这里也有同样的问题,还没找到优雅的解决办法。

我想将 Table2 的 @rid 复制到 Table1 的字段 "r1" 中,其中 Table2.f1=Table1.f2(f1 和 f2 只是另外两个字段)。

我想到的唯一解决办法是:

UPDATE Table1 SET r1=(SELECT @rid FROM Table2 
WHERE Table2.f1=$parent.$current.f2)

而这个 returns 是一个包含整个 field/value 列表的字符串。 然后我trim它如下:

UPDATE Table1 SET r1=r1.substring(6,12) 

(仅保留@rid 部分)

但在我看来,必须有一个 better/more 优雅的解决方案,只需一个查询。

有什么想法吗?

update Table1 set name=(select productname from Table2 where
@rid=$parent.$current.productid), 
name= name.replace("[","").replace("]","")

试试那个方法(分层链接)

UPDATE test1 SET ttt=(SELECT FROM test1 WHERE id=$parent.$current.parentId),
parent=ttt[0].@rid,ttt=null

它适用于 orientdb 2.19