2017-08-10 43 views
0

如果遇到一個非常難以處理的WHERE子句,只會返回我的TCODE列爲RI,RP或null的值。試過:DB2 SQL - WHERE TCODE是RI,RP還是null ...如何?

WHERE TCODE IN ('RI', 'RP', NULL) 

並收到SQL0206錯誤。試過:

WHERE TCODE = 'RI' or TCODE = 'RP' or TCODE IS NULL 

並收到SQL0199錯誤。

DB2在IBM i上,操作系統版本7.1

任何援助非常感謝!

馬特

編輯查詢:

SELECT T01.ORDRJI, T02.TCODE, T02.TRNDT, T02.TRQTY, T01.WHIDJI, T01.BUYRJI 
FROM SCHRCP T01 
LEFT OUTER JOIN IMHIST T02 ON T01.ORDRJI = T02.ORDNO 
AND T01.ITNOJI = T02.ITNBR AND T01.BKSQJI = T02.BLKSQ 
LEFT OUTER JOIN ITMRVA T03 ON T01.ITNOJI = T03.ITNBR 
LEFT OUTER JOIN VENNAM T04 ON T01.VNDRJI = T04.VNDNR 
WHERE T01.DKDTJI BETWEEN 1170401 AND 1170630 AND 
T02.TCODE IN ('RI', 'RP')and is null AND 
T01.RSSTJI <> '99' AND 
T01.WHIDJI <> '1' AND 
T03.ITCLS IN ('BA', 'BF', 'BP', 'CA', 'CM', 'DF', 'EA', 'EP', 'FA', 
'FG', 'FM', 'FP', 'HJ', 'HT', 'JG', 'KT', 'LT', 'MA', 'MP', 'NF', 
'PA', 'PP', 'RB', 'RF', 'RP', 'RS', 'RU', 'SA', 'SF', 'RM', 'WA', 
'WP', 'DH', 'HD', 'MC') AND 
T01.ITNOJI NOT IN ('CHARGES', 'MISC', 'MYLAR', 'CRATE', 'NRC', 'NRE') 

完全錯誤:

SQL0199 - Keyword NULL not expected. Valid tokens: < > = <> <= !< !> != >= ¬< ¬> ¬= IN NOT 
+0

能否請您提供您完整的查詢和實際的錯誤信息?你的'WHERE'子句(第二個)看起來很好。 – Siyual

+0

Siyual - 剛編輯包含該信息。謝謝! – user3593083

回答

2

的問題是在這裏:

And T02.TCODE IN ('RI', 'RP')and is null 

這是無效的語法 - 你需要改變t他對

And 
(
    T02.TCODE In ('RI', 'RP') 
    Or T02.TCODE Is Null 
) 

但除此之外,還有其他的問題與查詢。 WHERE子句在,LEFT OUTER JOIN後執行,因此這些過濾器將導致您的OUTER JOIN表現爲INNER JOIN

爲了解決這個問題,添加這些WHERE條件涉及外部表的ON條款:

Select T01.ORDRJI, 
     T02.TCODE, 
     T02.TRNDT, 
     T02.TRQTY, 
     T01.WHIDJI, 
     T01.BUYRJI 
From SCHRCP T01 
Left Outer Join IMHIST T02 
    On T01.ORDRJI = T02.ORDNO 
     And T01.ITNOJI = T02.ITNBR 
     And T01.BKSQJI = T02.BLKSQ 
     And (
       T02.TCODE In ('RI', 'RP') 
       Or T02.TCODE Is Null 
      ) 
Left Outer Join ITMRVA T03 
    On T01.ITNOJI = T03.ITNBR 
     And T03.ITCLS In ('BA', 'BF', 'BP', 'CA', 'CM', 'DF', 'EA', 'EP', 'FA', 'FG', 'FM', 'FP', 'HJ', 'HT', 'JG', 'KT', 'LT', 'MA', 'MP', 'NF', 'PA', 'PP', 
          'RB', 'RF', 'RP', 'RS', 'RU', 'SA', 'SF', 'RM', 'WA', 'WP', 'DH', 'HD', 'MC' 
         ) 
Left Outer Join VENNAM T04 
    On T01.VNDRJI = T04.VNDNR 
Where T01.DKDTJI Between 1170401 And 1170630 
     And T01.RSSTJI <> '99' 
     And T01.WHIDJI <> '1' 
     And T01.ITNOJI Not In ('CHARGES', 'MISC', 'MYLAR', 'CRATE', 'NRC', 'NRE'); 
+0

謝謝,Siyual ...我明白你的意思了。 (這最初是用Query400編寫的查詢,我用rtvqmqry在可視編輯器中使用它)。 – user3593083