0

I have two files in my unidata database as followed.

CUSTOMER

    -@CUSTOMERID
    -NAME
    -@HOBBYID (multi-valued, virtual attribute)

HOBBY

    -@HOBBYID
    -HOBBY

CUSTOMER and HOBBY are a one-to-many relationship. I want to query a list of customers who fit into a certain hobby. What will the unidata command be?

Look forward to a solution. Thanks.

4

2 回答 2

1

这是一个可以在 ECL 提示符下运行的简单查询

LIST HOBBY WITH HOBBY = "MyHobby" @CUSTOMERID @CUSTOMERID.NAME

让我解释一下。

当您查看多对一关系时,如果您从“多”表开始,则可以使用虚拟字典项来执行此操作(我知道,违反直觉对吗?)

LIST HOBBY

在这里,我们只是指示引擎对来自 HOBBY 文件的数据进行简单的显示。

WITH WITH HOBBY = "MyHobby"

我假设您已经创建了一个名为 HOBBY 的字典项 - 可能是指向正确属性的 D 类型。

@CUSTOMERID

另一个假设是,您有一个 D 型字典项,它指向 HOBBY 中具有 @CUSTOMERID 的属性。为了这个答案,我假设 @CUSTOMERID 是一个单一的值。这只是告诉 LIST 显示每条记录的这条信息

@CUSTOMERID.NAME

这是一个 I 型字典,如果您还没有创建,则需要创建。基本上,在属性 2 od 字典项中,您将拥有类似TRANS("CUSTOMER",@CUSTOMERID,2,"X"). 这告诉它读取具有在 @CUSTOMERID 中找到的 ID 的记录以获取当前爱好记录并返回属性 2(我假设属性 2 是您存储客户名称的位置,根据需要进行更改。“X”告诉TRANS 函数只返回一个空字符串,无法找到 CUSTOMER 记录。

于 2013-08-06T19:30:04.190 回答
0

担,

我认为你假设的比给出的要多。提供的信息并不表明在两个方向都有链接,只是爱好代码包含在CUSTOMER文件中。

鉴于提供的信息,这应该有效:

LIST CUSTOMER WITH @HOBBYID "MyHobby" NAME @HOBBYID

或者,如果您想使用HOBBY而不是@HOBBYID比较/选择:

LIST CUSTOMER WITH EVAL "TRANS(HOBBY,@HOBBYID,HOBBY,'X')" = "MyHobby" NAME @HOBBYID

当然,如果您在字典中创建了一个CUSTOMER可以使用的翻译字典项,而不是使用“EVAL ...”子句,那就更好了。

于 2013-08-07T21:14:35.440 回答