OrientDB:如何使用选择查询更新列

时间:2015-06-07 07:02:24

标签: sql orientdb

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

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

查询工作正常但不是名称查询将值存储在" [productname]"格式。

我已阅读orientdb文档,我猜选择查询以集合格式返回结果。所以我已经尝试过以下功能

  • 得到(1)
  • 第一()
  • [0]等(我绝望的尝试:)

提前致谢。

5 个答案:

答案 0 :(得分:4)

我尝试过搜索,但没有得到任何干净的答案,但我做了以下更改为我工作&完成了工作:)

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

希望这为某人节省时间。

答案 1 :(得分:1)

您会观察到此行为,因为子查询(选择查询)始终返回一个集合。 LET块可以帮助你。以下是在查询中使用LET块的方法;

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

LET块对于将多次使用的子查询,投影和保持结果非常有用。

您可以找到更多信息here

希望这有帮助。

答案 2 :(得分:0)

显然你的答案(@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)

这会返回一个包含整个字段/值列表的字符串。 然后我修剪它如下:

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

(仅保留@rid部分)

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

有什么想法吗?

答案 3 :(得分:0)

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

答案 4 :(得分:0)

尝试该方法(hierahical links)

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

它适用于orientdb 2.19