OrientDB: Как обновить столбец с помощью запроса выбора

Мне нужно обновить столбец в таблице, используя следующее:

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

Запрос работает нормально, но вместо запроса имени сохраняет значение в формате "[productname]".

Я прочитал документацию orientdb, думаю, запрос на выборку возвращает результат в формате коллекции. поэтому я уже попробовал следующие функции

  • получить (1)
  • первый()
  • [0] и т. Д. (Моя отчаянная попытка:)

Заранее спасибо.

5 ответов

Решение

Я попытался найти, но не получил ни одного чистого ответа, но я внес следующие изменения, которые сработали для меня и сделали свою работу:)

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

Надеюсь, это сэкономит время для кого-то.

Вы наблюдаете это поведение, так как подзапрос (запрос на выборку) всегда возвращает коллекцию. Блок LET поможет вам здесь. Ниже описано, как вы используете блок LET в своем запросе;

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

Блок LET полезен для подзапросов, проекций и хранения результатов, которые будут использоваться несколько раз.

Вы можете найти больше информации здесь.

Надеюсь это поможет.

Попробуйте этот метод (иерархическая ссылка)

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

Работает на orientdb 2.19

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

Видимо твой ответ (@Omega Silva) не работает как есть.

Это ошибка, которую я получаю

У меня та же проблема, и я не нашел элегантного решения.

Я хочу скопировать @rid таблицы Table2 в поле "r1" таблицы Table1, где 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)

Но мне кажется, что должно быть лучшее / более элегантное решение с одним запросом.

Есть идеи?

Другие вопросы по тегам