Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Выбор значений из списка встроенных объектов / 8 сообщений из 8, страница 1 из 1
01.10.2008, 11:25
    #35569174
=Dimon=
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор значений из списка встроенных объектов
Есть 3 класса:
Class A Extends %Persistent
{
Property sublinkList As list Of B;

Property name As %String
}

Class B Extends %Serial
{
Property nameC As C;

Property remark As %String;
}

Class С Extends %Persistent
{
Property name As %String;

Property remark As %String;
}

Как выбрать с помощью SQL запроса всех A, у которых элементы списка sublinkList ссылаются на некоторый C.
...
Рейтинг: 0 / 0
01.10.2008, 13:21
    #35569563
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор значений из списка встроенных объектов
А использование списка обязательно ?

При помощи массива SQL достаточно прост
...
Рейтинг: 0 / 0
01.10.2008, 17:16
    #35570313
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор значений из списка встроенных объектов
Например, так:
Код: plaintext
1.
2.
select a.* from test.A,test.C c where 
for SOME %ELEMENT(sublinkList) (%KEY=c.ID)
and c.name='asd'

Хотя, конечно, было бы проще так:
Код: plaintext
select * from test.A where for SOME %ELEMENT(sublinkList) (%VALUE->name='asd')
Попробуйте в WRC завести соответствующий Enhancement .
...
Рейтинг: 0 / 0
02.10.2008, 06:34
    #35571121
=Dimon=
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор значений из списка встроенных объектов
2servit
Ни первый, ни второй способ не работает в Каше 5.2.
...
Рейтинг: 0 / 0
02.10.2008, 09:02
    #35571201
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор значений из списка встроенных объектов
Ну, второй способ нигде не работает. Это пример, как удобней было бы. Я поэтому и упомянул про Enhancement .

А второй пример должен работать в версии 5.2 . В версии 2008.2.RC точно работает.
Попробуйте еще так:
Код: plaintext
1.
2.
select a.* from test.A a,test.C c where 
for SOME %ELEMENT(a.sublinkList) (%KEY=c.ID)
and c.name='asd'
...
Рейтинг: 0 / 0
02.10.2008, 10:30
    #35571408
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор значений из списка встроенных объектов
Дык .... с чего бы %KEY быть равным ID таблицы С ?

Там только поля совпадают - а чему равен %KEY в списке не ясно - скорее всего просто номеру элемента в списке (1,2,3,4...)
...
Рейтинг: 0 / 0
02.10.2008, 10:35
    #35571427
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор значений из списка встроенных объектов
Тут скорее всего нужно писать что то вроде

Код: plaintext
1.
2.
3.
select a.* from test.A a,test.C c where 
for SOME %ELEMENT(a.sublinkList) ($LISTGET(%VALUE, 2 )=c.name AND $LISTGET(%VALUE, 3 )=c. remark)
and c.ID=?

При этом прижедться помнить структуру хранения для B
...
Рейтинг: 0 / 0
02.10.2008, 11:52
    #35571690
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор значений из списка встроенных объектов
PtnДык .... с чего бы %KEY быть равным ID таблицы С ?

Там только поля совпадают - а чему равен %KEY в списке не ясно - скорее всего просто номеру элемента в списке (1,2,3,4...)
Да, Вы правы.

Рабочий вариант:
Код: plaintext
1.
2.
3.
select distinct a.* from test.A a,test.C c where 
for SOME %ELEMENT(a.sublinkList) ($LISTGET($LISTGET(%VALUE, 1 ), 1 )=+c.ID)
and c.name='asd'
или так, если известен C.ID:
Код: plaintext
1.
2.
select * from test.A where 
for SOME %ELEMENT(sublinkList) ($LISTGET($LISTGET(%VALUE, 1 ), 1 )= 123 )
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Выбор значений из списка встроенных объектов / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]