I want to update some rows of my table basing on other rows of the same table:
I try this:
UPDATE MyTable set myField =
(SELECT T1.myField
FROM MyTable T1
WHERE T1.id.substring(start,stop) = MyTable.id.substring(start,stop))
But OrientDB throws an error like this:
com.orientechnologies.orient.core.sql.OCommandSQLParsingException: Error on parsing command at position #XXX: Invalid keyword 'T1' Command:
答案 0 :(得分:2)
首先,您在OrientDB中不能在类上使用Alias。
在这种情况下,您可以在子查询中使用$ parent。$ current,例如:
> update MyTable set myField = (
> select myField
> from MyTable
> where myField is null
> and id.substring(8,13) = $parent.$current.id.substring(8,13) and something else...
> ) where myField is null and something else...
小心id的长度......
最诚挚的问候 微米。
答案 1 :(得分:0)
这不是字符串更新,而是整数更新。使用提供的GratefulDeadDatabase,您可以执行以下操作:
CONNECT remote:localhost/GratefulDeadConcerts;
SELECT performances FROM v;
----+------+------------
# |@CLASS|performances
----+------+------------
0 |null |null
1 |null |5
2 |null |1
3 |null |531
4 |null |394
----+------+------------
UPDATE v SET performances = eval('performances + 2') WHERE performances IS NOT NULL;
SELECT performances FROM v;
----+------+------------
# |@CLASS|performances
----+------+------------
0 |null |null
1 |null |7
2 |null |3
3 |null |533
4 |null |396
----+------+------------
因此更新适用于现有数据。我对OrientDB很新,所以也许专家可以告诉我,我是不是做了一件非常可怕的错误。
更新
请注意,在您的示例中,您使用同一个表中的值更新表。也就是说,从MyTable到MyTable(除非我误解了你的查询),甚至在同一行内。您可以使用WHERE子句上的条件仅更新感兴趣的行。在我的例子中,那是
WHERE performances IS NOT NULL