2014-12-24 96 views
1

我遇到了Progress問題,我們平常的程序員因爲這個假期而沒有了系統。我需要得到不是這些代碼之一的分支列表[「AXD」,「BOD」,「CLA」,「CNA」,「CTS」,「NOB」,「OFF」,「ONA」,「PRJ 」, 「WVL」]。進度4gl匹配查詢

我試圖for each removals where r-brchdisplay not(matches ["AXD","BOD","CLA","CNA","CTS","NOB","OFF","ONA","PRJ","WVL"]). display rpid.

但語法顯然是錯誤的。 謝謝

回答

0

方括號不是語法的正確部分。

匹配匹配一個字符串與另一個字符串 - 而不是一組選項。即

not (r-brchdisplay matches "axd" or r-brchdisplay matches "bod" or ...) 

使用MATCHES也很傻,因爲這些是沒有通配符的等式比較。 MATCHES通常在涉及通配符時使用。

在WHERE子句中,MATCHES通常也是一個非常非常糟糕的主意,因爲它幾乎保證了表掃描。

替代的方式來寫你的WHERE子句:

not (r-brchdisplay = "axd" or r-brchdisplay = "bod" or ...) 

r-brchdisplay <> "axd" and r-brchdisplay <> "bod" and ... 

LOOKUP()多是接近你可能需要:

for each removals no-lock where 
    lookup(r-brchdisplay, "axd,bod,cla,cna,cts,nob,off,ona,prj,wvl") = 0: 
    /* do something... */ 
end. 

(其中「= 0「表示LOOKUP沒有找到目標字符串...)

+0

查找也會導致表掃描 - 「<>」將是使用性能最高的結構。 –