我的unidata数据库中有两个文件,如下所示。
CUSTOMER
-@CUSTOMERID
-NAME
-@HOBBYID (multi-valued, virtual attribute)HOBBY
-@HOBBYID
-HOBBYCUSTOMER和HOBBY是一对多关系。我想查询一份适合某项爱好的客户列表。unidata命令是什么?
期待解决方案。谢谢。
发布于 2013-08-07 03:30:04
下面是一个可以在ECL提示符下运行的简单查询
LIST HOBBY WITH HOBBY = "MyHobby" @CUSTOMERID @CUSTOMERID.NAME
让我来解释一下。
当你看到一个多对一的关系时,如果你从“多个”表开始,你可以使用虚拟字典条目来做这件事(我知道,这与直觉相反,对吧?)
LIST HOBBY
在这里,我们只是指示引擎对业余爱好文件中的数据进行简单的显示。
WITH WITH HOBBY = "MyHobby"
我假设您已经创建了一个名为HOBBY的字典条目-可能是一个指向正确属性的D-type。
@CUSTOMERID
另一种假设是,您有一个D型字典条目,它指向业余爱好中具有@CUSTOMERID的属性。为了这个答案,我假设@CUSTOMERID是一个单一的值。这只是告诉LIST为每条记录显示这段信息
@CUSTOMERID.NAME
这是一个I-type字典,如果您尚未创建,则需要创建该字典。基本上,在字典项的属性2中,您将拥有类似于TRANS("CUSTOMER",@CUSTOMERID,2,"X")的内容。这告诉它读取在@CUSTOMERID中找到的当前业余爱好记录的ID的记录,并返回属性2(我假设属性2是存储客户名称的位置,根据需要进行更改。"X“告诉TRANS函数,如果找不到客户记录,则只返回一个空字符串。
发布于 2013-08-08 05:14:35
丹
我认为你假设的比给予的要多。所提供的信息并不表明在两个方向上都有链接,只有爱好代码包含在CUSTOMER文件中。
考虑到提供的信息,这应该是可行的:
LIST CUSTOMER WITH @HOBBYID "MyHobby" NAME @HOBBYID或者,如果要使用HOBBY而不是@HOBBYID进行比较/选择:
LIST CUSTOMER WITH EVAL "TRANS(HOBBY,@HOBBYID,HOBBY,'X')" = "MyHobby" NAME @HOBBYID当然,如果您已经在CUSTOMER字典中创建了一个translate字典条目,可以用来代替使用'EVAL ...‘,那就更好了。子句。
https://stackoverflow.com/questions/18086090
复制相似问题