unidata命令从两个文件中查询数据

时间:2013-08-06 16:56:15

标签: jpa openjpa u2 unidata

我的unidata数据库中有两个文件,如下所示。

CUSTOMER

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

HOBBY

    -@HOBBYID
    -HOBBY

CUSTOMERHOBBY是一对多的关系。我想查询适合某种爱好的客户列表。 unidata命令是什么?

期待解决方案。感谢。

2 个答案:

答案 0 :(得分: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记录。

答案 1 :(得分: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 ...'子句的翻译字典项,那就更好了。