2

我有一个表 DEBTOR,其结构如下:

债务人

第二个表 DEBTOR.INFO 的结构如下:

债务人信息

我有一个由DEBTOR.INFO表中的记录 ID 组成的选择列表。我怎样才能

select * from DEBTOR WHERE 53 IN (name of select list)?

这甚至可能吗?

我意识到这个查询看起来更像 SQL 而不是 RetrieVe,但我这样写是为了更容易理解我想要完成的事情。

目前,我通过编写完成此查询

SELECT DEBTOR WITH 53 EQ [paste list of DEBTOR.INFO record IDs]

但显然这对于​​大型列表来说很笨拙。

4

4 回答 4

0

在我看来,你不能那样做。即使您使用和 i-descriptor,它也只能在一个方向上起作用。TRANS("DEBTOR.INFO",53,0,"X") 从 DEBTOR 文件工作,但不是相反。所以来自 DEBTOR.INFO 的 TRANS("DEBTOR",@ID,53,"X") 不会返回任何内容。

有关可能的解决方案,请参阅U2 网站上的这篇文章。

于 2014-09-04T03:33:40.267 回答
0

像这样的工作(两个步骤):

选择 DEBTOR.INFO 保存数据包列表债务人 ....

这将在 DEBTOR.INFO 文件的 PACKET 字段中创建数据的选择列表并使其处于活动状态。(如果您有重复的值,您可以在 SAVING 之后添加关键字 UNIQUE)。

然后随后的 LIST 命令使用包含在文件 DEBTOR 的 @ID 字段中找到的值的活动选择列表。

于 2014-09-04T17:17:16.600 回答
0

不确定您是否还在看这个,但是有一个不需要大量编程的简单选项。

我用一个程序、一个子程序和一个字典项来完成它。

首先,我设置了一个命名的公共变量来包含 DEBTOR.INFO id 的列表:

SETLIST
*
* Use named common to hold list of keys
COMMON /MYKEYS/ KEYLIST
*
* Note for this example I am reading the list from SAVEDLISTS
OPEN "SAVEDLISTS" TO FILE ELSE STOP "CAN NOT OPEN SAVEDLISTS"
READ KEYLIST FROM FILE, "MIKE000" ELSE STOP "NO MIKE000 ITEM"

现在,我可以创建一个检查该列表中的值的子例程

CHECKLIST
SUBROUTINE CHECKLIST( RVAL, IVAL)
COMMON /MYKEYS/ KEYLIST
LOCATE IVAL IN KEYLIST <1> SETTING POS THEN
  RVAL = 1
END ELSE RVAL = 0
RETURN

最后,我使用字典项来调用包含我要查找的字段的子例程:

INLIST:
I
SUBR("CHECKLIST", FK)

IN LIST
10R
S

现在我所要做的就是在我的列表语句中添加正确的标准:

LIST DEBTOR WITH INLIST = 1 ACCOUNT STATUS FK
于 2014-09-10T18:47:55.483 回答
0

我使用非常强大的 EVAL 和 XLATE ;

SELECT DEBTOR WITH EVAL \XLATE('DEBTOR.INFO',@RECORD<53>,'-1','X')\ NE ""
于 2014-11-07T10:42:57.577 回答