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



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

由于您没有发布任何关于临时表的信息,我猜它们是由一个名为"id"的字段链接在一起的。我还假设ih_hist是一个"主"表,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中的字段匹配,但包含不同的数据,就像两者中的名称字段一样)。否则,您也可以执行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:

最新更新