Данные запроса команды 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 ...".

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