进度 - 加入表格

时间:2015-01-07 10:36:09

标签: sql join progress-4gl openedge progress-db

我在向数据库创建记录之前添加了一些验证检查,我需要满足以下条件:

  

查找fieldinfo,其中fieldinfo.fieldno = 5052   找到codetable,其中codetable.tableno = fieldinfo.tableno和codetable.code = tt-employee.costcode

tt-employee是一个临时表,其余的都是直接来自db

由于我是新手,我有点困惑 - 应该使用联接,如果有的话,任何想法怎么做?谢谢!

2 个答案:

答案 0 :(得分:2)

这里有一些事情需要考虑:

<强>验证

您可以在逻辑或数据库本身中添加验证。如何做到这取决于你和系统的外观。如果数据库中已经存在验证,则可能需要将其保留在那里。

但如果这不是您的客户/老板等的要求,我个人会将所有验证都放在业务逻辑中而不是架构中。

如果要使用数据库驱动的方法,请检查数据库手册中的“验证”。

<强>加入

另一个问题是您的查询错误。 Progress确实支持已加入的查询,但不支持FIND - 语句。

这样做是为了保持FIND:

FIND fieldinfo NO-LOCK WHERE fieldinfo.fieldno = 5052 NO-ERROR.
IF AVAILABLE fieldinfo THEN DO:
  FIND FIRST codetable NO-LOCK WHERE codetable.tableno = fieldinfo.tableno 
                                 AND codetable.code    = tt-employee.costcode NO-ERROR.
  IF AVAILABLE codetable THEN DO:
    /* Do something */
  END.
END.

您还可以将其更改为带有联接的FOR - 语句。

FOR EACH fieldinfo NO-LOCK WHERE fieldinfo.fieldno = 5052, 
  FIRST codetable NO-LOCK WHERE codetable.tableno = fieldinfo.tableno 
                           AND codetable.code    = tt-employee.costcode:
  /* Do something */
END.

答案 1 :(得分:1)

尝试:

IF  expression  THEN   {block/statement}    [ELSE   {block/statement}]

OR

IF  expression  THEN DO:   {block}   END.   [ELSE DO:   {block}   END.]

看看,如果有帮助。