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)
Но мне кажется, что должно быть лучшее / более элегантное решение с одним запросом.
Есть идеи?