You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 03:50:27