簡體   English   中英

OUTER-JOIN 是否總是將查詢分成兩部分,如果在 Progress 中未完成,則右側部分為空?

[英]Does a OUTER-JOIN always divide the query in two parts, leaving the part on the right empty if not complete in Progress?

我正在嘗試使用 頁面作為靈感進行 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.

發生的問題是當 null 中的 1 個元素時,OUTER-JOIN 中的所有其他元素也顯示為 null,即使它們不是 Z37A6259CC0C1DAE299A7866489DFFBD0。 有沒有更好的方法來編寫這段代碼? 我應該在 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

不可用的連接顯示為unknown 顯示連接外部值。

由於您沒有顯示如何為所有內容獲得未知值,因此您可能正在連接未知值?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM