DB2SQL-其中TCODE是RI、RP或null…如何?

DB2SQL-其中TCODE是RI、RP或null…如何?,sql,null,db2,Sql,Null,Db2,很难想出一个WHERE子句,它只返回TCODE列为RI、RP或null的值。尝试: WHERE TCODE IN ('RI', 'RP', NULL) 并接收SQL0206错误。尝试: WHERE TCODE = 'RI' or TCODE = 'RP' or TCODE IS NULL 并接收SQL0199错误 IBM i上的DB2,操作系统版本7.1 非常感谢您的帮助 马特 编辑以进行查询: SELECT T01.ORDRJI, T02.TCODE, T02.TRNDT, T02.TRQ

很难想出一个WHERE子句,它只返回TCODE列为RI、RP或null的值。尝试:

WHERE TCODE IN ('RI', 'RP', NULL)
并接收SQL0206错误。尝试:

WHERE TCODE = 'RI' or TCODE = 'RP' or TCODE IS NULL
并接收SQL0199错误

IBM i上的DB2,操作系统版本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')
选择T01.ORDRJI、T02.TCODE、T02.TRNDT、T02.TRQTY、T01.WHIDJI、T01.BUYRJI
从SCHRCP T01
T01上的左外连接IMHIST T02.ORDRJI=T02.ORDNO
T01.ITNOJI=T02.ITNBR和T01.BKSQJI=T02.BLKSQ
T01上的左外连接ITMRVA T03.ITNOJI=T03.ITNBR
T01.VNDRJI=T04.VNDNR上的左外连接VENNAM T04
其中T01.DKDTJI介于117041和1170630之间,且
T02.TCODE位于('RI','RP')中,为null,并且
T01.RSSTJI'99'和
T01.WHIDJI'1'和
T03.ITCLS在('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”)和
T01.ITNOJI不在(‘费用’、‘杂项’、‘聚酯薄膜’、‘板条箱’、‘NRC’、‘NRE’)
完全错误:

SQL0199 - Keyword NULL not expected. Valid tokens: < > = <> <= !< !> != >= ¬< ¬> ¬= IN NOT
SQL0199-不应为关键字NULL。有效令牌:<>=!=>=不在
问题在于:

And T02.TCODE IN ('RI', 'RP')and is null
这是无效语法-您需要将其更改为

And 
(
    T02.TCODE In ( 'RI', 'RP' )
    Or T02.TCODE Is Null
)
但除此之外,该查询还存在其他问题。
WHERE
子句在
左外部联接之后执行,因此这些筛选器将使您的
外部联接
表现为
内部联接

要解决此问题,请将涉及外部表的
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' );
选择T01.ORDRJI,
T02.TCODE,
T02.TRNDT,
T02.TRQTY,
T01.WHIDJI,
T01.BUYRJI
从SCHRCP T01
左外连接IMHIST T02
在T01.ORDRJI=T02.ORDNO上
T01.ITNOJI=T02.ITNBR
T01.BKSQJI=T02.BLKSQ
及(
T02.TCODE In('RI','RP'))
或T02.TCODE为空
)
左外连接ITMRVA T03
关于T01.ITNOJI=T03.ITNBR
以及T03.ITCLS在(‘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’
)
左外连接VENNAM T04
关于T01.VNDRJI=T04.VNDNR
其中T01.DKDTJI介于117041和1170630之间
T01.RSSTJI'99'
T01.WHIDJI'1'
T01.ITNOJI不在(‘费用’、‘杂项’、‘聚酯薄膜’、‘板条箱’、‘NRC’、‘NRE’);
问题在于:

And T02.TCODE IN ('RI', 'RP')and is null
这是无效语法-您需要将其更改为

And 
(
    T02.TCODE In ( 'RI', 'RP' )
    Or T02.TCODE Is Null
)
但除此之外,该查询还存在其他问题。
WHERE
子句在
左外部联接之后执行,因此这些筛选器将使您的
外部联接
表现为
内部联接

要解决此问题,请将涉及外部表的
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' );
选择T01.ORDRJI,
T02.TCODE,
T02.TRNDT,
T02.TRQTY,
T01.WHIDJI,
T01.BUYRJI
从SCHRCP T01
左外连接IMHIST T02
在T01.ORDRJI=T02.ORDNO上
T01.ITNOJI=T02.ITNBR
T01.BKSQJI=T02.BLKSQ
及(
T02.TCODE In('RI','RP'))
或T02.TCODE为空
)
左外连接ITMRVA T03
关于T01.ITNOJI=T03.ITNBR
以及T03.ITCLS在(‘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’
)
左外连接VENNAM T04
关于T01.VNDRJI=T04.VNDNR
其中T01.DKDTJI介于117041和1170630之间
T01.RSSTJI'99'
T01.WHIDJI'1'
T01.ITNOJI不在(‘费用’、‘杂项’、‘聚酯薄膜’、‘板条箱’、‘NRC’、‘NRE’);

您能提供完整的查询和实际的错误信息吗?您的
WHERE
子句(第二个)看起来不错。Siyual-刚刚编辑以包含该信息。非常感谢。您能提供完整的查询和实际的错误信息吗?您的
WHERE
子句(第二个)看起来不错。Siyual-刚刚编辑以包含该信息。非常感谢。谢谢,西亚尔……我明白你的意思了。(这最初是用Query400编写的查询,我使用rtvqmqry在可视化编辑器中使用它)。谢谢,Siyual…我明白你的意思。(这最初是用Query400编写的查询,我使用rtvqmqry在可视化编辑器中使用它)。