我有一张桌子,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]
但很明显,这对于大型名单来说是笨重的。
答案 0 :(得分:0)
我认为你不能这样做。即使你使用和i-descriptor,它只能在一个方向上工作。 TRANS(" DEBTOR.INFO",53,0," X")来自DEBTOR文件但不是另一种方式。所以来自DEBTOR.INFO的TRANS(" DEBTOR",@ ID,53," X")将不会返回任何内容。
有关可能的解决方案,请参阅此article on U2's site。
答案 1 :(得分:0)
这样的工作(两步):
SELECT DEBTOR.INFO SAVING PACKET LIST DEBTOR ....
这将在DEBTOR.INFO文件的PACKET字段中创建数据的选择列表并使其处于活动状态。 (如果你有这样的重复值,你可以在SAVING之后添加关键字UNIQUE。)
然后,随后的LIST命令使用该活动选择列表,该列表包含在文件DEBTOR的@ID字段中找到的值。
答案 2 :(得分: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
答案 3 :(得分:0)
我使用非常强大的EVAL和XLATE;
SELECT DEBTOR WITH EVAL \XLATE('DEBTOR.INFO',@RECORD<53>,'-1','X')\ NE ""