如何在Progess OpenEdge过程中两次查询同一个表?

Fan*_*nda 3 progress-4gl openedge

在这个例子中,我有两个表; 订单标题(oe-hdr)和位置(位置).订单表头表包含两个字段(sale-location-key和ship-location-key),这些字段在位置表中具有关联的位置名称.如果我使用SQL来获取结果,我会做这样的事情.

SELECT oe-hdr.order-num, oe-hdr.order-date, saleloc.location-name, shiploc.location-name
FROM oe-hdr,
    (SELECT location.location-name
     FROM oe-hdr, location
     WHERE oe-hdr.sale-location-key = location-key) as saleloc,
    (SELECT location.location-name
     FROM oe-hdr, location
     WHERE oe-hdr.ship-location-key = location-key) as shiploc
WHERE oe-hdr.order-num = saleloc.order-num 
AND oe-hdr.order-num = shiploc.order-num
Run Code Online (Sandbox Code Playgroud)

有谁知道如何在Progress程序中复制它?

Tim*_*ehn 5

为"location"定义两个缓冲区,然后使用指向缓冲区的链接执行for-each:

DEFINE BUFFER saleloc FOR location.
DEFINE BUFFER shiploc FOR location.

FOR EACH oe-hdr
   NO-LOCK,

   EACH saleloc
      WHERE saleloc.location-key = oe-hdr.sale-location-key
      NO-LOCK,

   EACH shiploc
      WHERE shiploc.location-key = oe-hdr.ship-location-key
      NO-LOCK
     :

   DISPLAY
       oe-hdr.order-num
       oe-hdr.order-date
       saleloc.location-name
       shiploc.location-name
     DOWN
     .

END.
Run Code Online (Sandbox Code Playgroud)

一个注释 - 如果位置表中不存在销售或送货地址,则不会显示整个记录.如果您需要该功能,则需要采用不同的方法 - 它将涉及将"链接"移动到FOR EACH块中的一对"FIND"语句.