Данные запроса команды unidata из двух файлов
У меня есть два файла в моей базе данных unidata, как указано ниже.
CUSTOMER
-@CUSTOMERID
-NAME
-@HOBBYID (multi-valued, virtual attribute)
HOBBY
-@HOBBYID
-HOBBY
CUSTOMER
а также HOBBY
отношения один ко многим. Я хочу запросить список клиентов, которые вписываются в определенное хобби. Какой будет команда unidata?
С нетерпением ждем решения. Благодарю.
2 ответа
Вот простой запрос, который вы можете запустить в приглашении ECL
LIST HOBBY WITH HOBBY = "MyHobby" @CUSTOMERID @CUSTOMERID.NAME
Позвольте мне объяснить это.
Поскольку вы смотрите на отношение "многие к 1", вы можете сделать это, используя элементы виртуального словаря, если вы начнете со таблицы "многие" (я знаю, нелогично, верно?)
LIST HOBBY
Здесь мы просто инструктируем движок для простого отображения данных из файла HOBBY.
WITH WITH HOBBY = "MyHobby"
Я предполагаю, что вы уже создали элемент словаря с именем HOBBY - вероятно, D-типа, который указывает на правильный атрибут.
@CUSTOMERID
Другое предположение, у вас есть элемент словаря D-типа, который указывает на атрибут в HOBBY, который имеет @CUSTOMERID. Я предполагаю, что @CUSTOMERID является единственным значением ради этого ответа. Это просто говорит LIST отображать эту информацию для каждой записи
@CUSTOMERID.NAME
Это словарь I-типа, который вам нужно создать, если вы еще этого не сделали. По сути, в атрибуте 2 элемента словаря вы бы получили что-то вроде TRANS("CUSTOMER",@CUSTOMERID,2,"X")
, Это говорит о том, что нужно прочитать запись с идентификатором, найденным в @CUSTOMERID для текущей записи хобби, и вернуть вам атрибут 2 (я предполагаю, что атрибут 2 - это место, где вы храните имя клиента, измените по желанию. "X" говорит Функция TRANS, которая просто возвращает пустую строку, запись CUSTOMER не может быть найдена.
Дэн,
Я думаю, что вы предполагали больше, чем дано. Предоставленная информация не предполагает наличие ссылок в обоих направлениях, только то, что коды хобби содержатся в CUSTOMER
файл.
Учитывая предложенную информацию, это должно работать:
LIST CUSTOMER WITH @HOBBYID "MyHobby" NAME @HOBBYID
или, если вы хотите использовать HOBBY
а не @HOBBYID
сравнить / выбрать с:
LIST CUSTOMER WITH EVAL "TRANS(HOBBY,@HOBBYID,HOBBY,'X')" = "MyHobby" NAME @HOBBYID
Конечно, было бы еще лучше, если бы вы создали элемент словаря для перевода в CUSTOMER
словарь, который можно использовать вместо выражения "EVAL ...".