Progress 4GL:如何在单个表字段中用AND运算符筛选多条记录?
问题分析与解决
你的查询无法得到结果,核心原因是WHERE子句存在逻辑矛盾:value1 = "005" AND value1 = "009" 要求单条记录的value1字段同时等于两个不同值,这在逻辑上不可能成立,因此永远不会返回任何记录。
根据你“筛选出表中包含value1为"005"和"009"的记录”的需求,分两种场景提供解决方案:
场景1:获取所有value1为"005"或"009"的记录
如果是要把这两类记录全部查询出来,只需将条件里的AND替换为OR即可:
DEFINE TEMP-TABLE test NO-UNDO FIELD value1 AS CHARACTER . EMPTY TEMP-TABLE test. CREATE test. ASSIGN value1 = "005". CREATE test. ASSIGN value1 = "009". CREATE test. ASSIGN value1 = "001". FOR EACH test NO-LOCK WHERE value1 <> "" AND (value1 = "005" OR value1 = "009") : MESSAGE value1 VIEW-AS ALERT-BOX. END.
场景2:确认表中同时存在"005"和"009"的记录,并输出它们
如果需要先判断表中是否同时包含这两个值,再输出对应记录,可以用以下方式实现:
DEFINE TEMP-TABLE test NO-UNDO FIELD value1 AS CHARACTER . EMPTY TEMP-TABLE test. CREATE test. ASSIGN value1 = "005". CREATE test. ASSIGN value1 = "009". CREATE test. ASSIGN value1 = "001". DEFINE VARIABLE has005 AS LOGICAL NO-UNDO. DEFINE VARIABLE has009 AS LOGICAL NO-UNDO. has005 = EXISTS(FIRST test WHERE value1 = "005"). has009 = EXISTS(FIRST test WHERE value1 = "009"). IF has005 AND has009 THEN DO: MESSAGE "表中同时存在value1为005和009的记录" VIEW-AS ALERT-BOX. FOR EACH test NO-LOCK WHERE value1 IN ("005", "009"): MESSAGE value1 VIEW-AS ALERT-BOX. END. END.
另外,也可以用IN运算符简化条件,效果和OR一致:value1 IN ("005", "009")。
内容的提问来源于stack exchange,提问作者Bharat
相关产品推荐
相关产品推荐

