我的unidata数据库中有两个文件,如下所示。
CUSTOMER
-@CUSTOMERID
-NAME
-@HOBBYID (multi-valued, virtual attribute)
HOBBY
-@HOBBYID
-HOBBY
CUSTOMER
和HOBBY
是一对多的关系。我想查询适合某种爱好的客户列表。 unidata命令是什么?
期待解决方案。感谢。
答案 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 ...'子句的翻译字典项,那就更好了。