微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OUTER-JOIN 是否总是将查询分为两部分,如果在 Progress 中未完成,则将右侧的部分留空?

如何解决OUTER-JOIN 是否总是将查询分为两部分,如果在 Progress 中未完成,则将右侧的部分留空?

我正在尝试使用 this 页面作为灵感进行 OUTER-JOIN。我的代码如下

OPEN QUERY qMovto
FOR EACH movto-estoq
WHERE movto-estoq.lote BEGINS pc-lote
AND movto-estoq.it-codigo BEGINS pc-it-codigo
AND movto-estoq.dt-trans >=  pd-data1
AND movto-estoq.dt-trans <=  pd-data2
AND movto-estoq.cod-emitente = pi-cod-emitente,EACH item OUTER-JOIN
    WHERE movto-estoq.it-codigo = item.it-codigo,EACH item-cli OUTER-JOIN
        WHERE item-cli.item-do-cli BEGINS pc-item-cli
        AND movto-estoq.cod-emitente = item-cli.cod-emitente
        AND movto-estoq.it-codigo = item-cli.it-codigo
        AND movto-estoq.un = item-cli.unid-med-cli,EACH nota-fiscal OUTER-JOIN
            WHERE movto-estoq.nro-docto = nota-fiscal.nr-nota-fis
            BY movto-estoq.dt-trans DESCENDING BY movto-estoq.hr-trans DESCENDING.

发生的问题是,当 1 个元素为 null 时,OUTER-JOIN 中的所有其他元素也显示为 null,即使它们不为 null。有没有更好的方法来编写这段代码?我应该在 OUTER-JOIN 之前放 'LEFT' 吗?感谢您抽出宝贵时间。

解决方法

为了使您的示例更简单,请考虑在 ABL dojo 中使其工作。以下代码:

define temp-table ttone
   field ii as int
   .

define temp-table tttwo
   field ii as int
   field cc as char
   .

create ttone. ttone.ii = 1.
create ttone. ttone.ii = 2.
create tttwo. tttwo.ii = 2. tttwo.cc = "inner".
create tttwo. tttwo.ii = 3. tttwo.cc = "orphan".

define query q for ttone,tttwo.
open query q 
    for each ttone,each tttwo outer-join where tttwo.ii = ttone.ii.
    
get first q.
do while available ttone:
   message ttone.ii tttwo.cc.
   get next q.
end.

可以从 https://abldojo.services.progress.com/?shareId=600f40919585066c219797ed

运行

如您所见,结果是:

1 ?
2 inner

不可用的连接显示为未知显示连接外部的值。

由于您没有展示如何为所有内容获取未知值,也许您正在连接未知值?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。