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结果是集合格式。所以我已经尝试了以下功能
- 获取(1)
- 首先()
- [0] 等(我的绝望尝试:)
提前致谢。
我尝试搜索但没有得到任何干净的答案,但我进行了以下更改对我有用并完成了工作:)
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) 无法正常工作。
我这里也有同样的问题,还没找到优雅的解决办法。
我想将 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
我需要使用以下内容更新 table 中的一列:
update Table1 set name = (select productName from Table2 where
@rid=$parent.$current.productid)
查询工作正常,但不是名称查询,而是以“[productname]”格式存储值。
我已经阅读了orientdb文档,我猜select查询returns结果是集合格式。所以我已经尝试了以下功能
- 获取(1)
- 首先()
- [0] 等(我的绝望尝试:)
提前致谢。
我尝试搜索但没有得到任何干净的答案,但我进行了以下更改对我有用并完成了工作:)
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) 无法正常工作。
我这里也有同样的问题,还没找到优雅的解决办法。
我想将 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