SQL SELECT 和 WHERE

问题描述 投票:0回答:2

我想选择PL类别52105下的交易和交易代码9007和9803,但结果是选择除2之外的其他交易代码。我哪里出错了?

FROM [Steward].[dbo].[vwNONFUNDED_RECOMP_04] 
   
WHERE PL_CATEGORY_CATEG_STMT IN ('52105') OR PL_CATEGORY_CATEG_STMT IS NULL AND TRANSACTION_CODE_STMT IN ('9007', '9803') AND REVERSAL_MARKER_STMT NOT LIKE ('R')  

order by BOOKING_DATE_STMT

sql mysql sql-server where-clause ssms
2个回答
1
投票

它的优先顺序使得

OR
语句后面的所有内容都被视为如此。

请尝试以下操作,使用括号强制排序:

WHERE (PL_CATEGORY_CATEG_STMT IN ('52105') OR PL_CATEGORY_CATEG_STMT IS NULL) AND TRANSACTION_CODE_STMT IN ('9007', '9803') AND REVERSAL_MARKER_STMT NOT LIKE ('R')

请注意参与

OR
子句的两个语句周围的两个括号。


0
投票

考虑这样重写:

FROM [Steward].[dbo].[vwNONFUNDED_RECOMP_04] 
   
WHERE TRANSACTION_CODE_STMT IN ('9007', '9803') AND REVERSAL_MARKER_STMT NOT LIKE ('R')  AND (PL_CATEGORY_CATEG_STMT IN ('52105') OR PL_CATEGORY_CATEG_STMT IS NULL)

order by BOOKING_DATE_STMT

您可能想看看您是如何编写“不喜欢”的,它应该包含通配符,具体取决于您希望它实现的目标

例如,不像 ('R%') - 其中 R 不开始文本

© www.soinside.com 2019 - 2024. All rights reserved.