如何使用正在进行的临时表链接两个表

时间:2015-11-25 11:47:10

标签: progress-4gl openedge progress-db

我是Progress 4gl中的新手我希望使用临时条件在单个表中获取两个表的数据。 我有两个表ih_hist和sod1_det,我想从每个表中获得2,2列。从我需要的ih_hist列,是ih_nbr和ih_inv_nbr,从sod1_det列是sod1_nbr和sod1_shipfrom_ctry。 请帮帮我。 提前谢谢

1 个答案:

答案 0 :(得分:4)

由于您没有发布有关临时表的任何信息,我猜测它们是通过名为" id"的字段链接在一起的。我还假设ih_hist是一个"主人" table和sod1_det包含详细信息。这可能是错误的 - 您需要告知我们有关您的数据的更多信息!

您需要做好以下几个部分:首先加入两个临时表。这在很大程度上取决于您的临时表定义,临时表包含以及您真正想要的内容。你有一对多的关系,一对一,甚至可能是多对多吗?关系是基于单个字段(外键)还是基于许多不同的字段?临时表(如Progress数据库中的实际字段)不包含关系 - 关系由代码处理!

这是一个可以帮助您入门的基本示例!

DEFINE TEMP-TABLE ih_hist NO-UNDO
    FIELD id         AS INTEGER
    FIELD ih_nbr     AS INTEGER
    FIELD ih_inv_nbr AS INTEGER.

DEFINE TEMP-TABLE sod1_det NO-UNDO
    FIELD id                 AS INTEGER
    FIELD sod1_nbr           AS INTEGER
    FIELD sod1_shipfrom_ctry AS CHARACTER.

DEFINE TEMP-TABLE ttNewTempTable NO-UNDO
    FIELD ih_nbr     AS INTEGER
    FIELD ih_inv_nbr AS INTEGER
    FIELD sod1_nbr           AS INTEGER
    FIELD sod1_shipfrom_ctry AS CHARACTER.

FOR EACH ih_hist, EACH sod1_det WHERE sod1_det.id = ih_hist.id:
    CREATE ttNewTempTable.
    BUFFER-COPY ih_hist TO ttNewTempTable.
    BUFFER-COPY sod1_det TO ttNewTempTable.
END. 

我可以使用BUFFER-COPY,因为字段名称在源和目标临时表中匹配且不重叠(即id_hist中的名称与sod1_det中的字段不匹配但包含不同的数据 - 如名称字段in都)。否则你也可以做一个ASSIGN或BUFFER-COPY和ASSIGN的组合。

仅有ASSIGN的示例:

FOR EACH ih_hist, EACH sod1_det WHERE sod1_det.id = ih_hist.id:
    CREATE ttNewTempTable.
    ASSIGN 
      ttNewTempTable.ih_nbr             = ih_hist.ih_nbr
      ttNewTempTable.ih_inv_nbr         = ih_hist.ih_inv_nbr
      ttNewTempTable.sod1_nbr           = sod1_det.sod1_nbr
      ttNewTempTable.sod1_shipfrom_ctry = sod1_det.sod1_shipfrom_ctry.
END. 

ASSIGN和BUFFER-COPY示例:

FOR EACH ih_hist, EACH sod1_det WHERE sod1_det.id = ih_hist.id:
    CREATE ttNewTempTable.
    BUFFER-COPY ih_hist TO ttNewTempTable
        ASSIGN 
           ttNewTempTable.sod1_nbr           = sod1_det.sod1_nbr
           ttNewTempTable.sod1_shipfrom_ctry = sod1_det.sod1_shipfrom_ctry.
END. 

根据您的评论,WHERE子句可能看起来像这样:

FOR EACH ih_hist, EACH sod1_det WHERE sod1_det.sod1_nbr = ih_hist.ih_nbr: