我需要使用以下内容更新表中的列:
update Table1 set name = (select productName from Table2 where
@rid=$parent.$current.productid)
查询工作正常但不是名称查询将值存储在" [productname]"格式。
我已阅读orientdb文档,我猜选择查询以集合格式返回结果。所以我已经尝试过以下功能
提前致谢。
答案 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)不能正常工作。
我在这里遇到同样的问题,但我还没有找到一个优雅的解决方案。
我想将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