UPDATE:
Я смог решить эту проблему с помощью INSERT INTO :
INSERT INTO newClass FROM SELECT newClassID AS id, newClassName AS name FROM oldClass GROUP BY newClassID
Я использую SQL с Orient DB версии 2.2.
Я хочу сгруппировать элемент одного класса по атрибуту newClassID (есть несколько элементов в этом классе, которые совместно используют newClassID, скажем, у меня есть 20 элементов в первом классе и 3 уникальных newClassID). Каждая группа будет иметь уникальный newClassID, а также newClassName, поскольку эти атрибуты идут рука об руку.
Для каждой группы я хочу создать элемент другого класса (newClass
), который будет иметь id = newClassID и name = newClassName. В приведенном выше случае это приведет к 3 новым элементам в newClass
.
Эмелемт первого класса будет выглядеть так:
+-------+------------+--------------+
| Elem | newClassID | newClassName |
+-------+------------+--------------+
| 1 | id1 | name1 |
| 2 | id2 | name2 |
| 3 | id1 | name1 |
| 4 | id3 | name3 |
| 5 | id2 | name2 |
+-------+------------+--------------+
и я палочка, чтобы создать 3 новых элемента в новом классе:
+-------+------------+--------------+
| Elem | ID | Name |
+-------+------------+--------------+
| 1 | id1 | name1 |
| 2 | id2 | name2 |
| 3 | id3 | name3 |
+-------+------------+--------------+
С помощью этого запроса я получаю идентификатор и имя в качестве атрибутов:
BEGIN
let pattern = SELECT newClassID, newClassName FROM oldClass GROUP BY newClassID
COMMIT
RETURN { 'id' : $pattern.newClassID, 'name' : $pattern.newClassName }
Результат:
[
{
"@type": "d",
"@version": 0,
"name": [
"name1",
"name2",
"name3"
],
"id": [
"id1",
"id2",
"id3"
],
"@fieldTypes": "name=e,id=e"
}
]
Теперь я хочу вызвать эту функцию (называемую GetNewClass()
) и создать для каждой записи в id новыйClassElement. Я не могу использовать FOREACH
, так как он доступен только в версии 3.x. Если честно: здесь я понятия не имею, как это сделать ..
Я пытался:
BEGIN
INSERT INTO newClass FROM SELECT GetNewClass()
let newElements = SELECT FROM newClass
RETURN $newElements
но это дает мне только один элемент с:
[
{
"@type": "d",
"@rid": "#41:1",
"@version": 1,
"@class": "newClass",
"GetProdID": {
"name": [
"name1",
"name2",
"name3"
],
"id": [
"id1",
"id2",
"id3"
]
}
}
]
Большое спасибо!