NOT LIKE 无法在查询中排除结果 SQL

NOT LIKE failing to exclude results SQL in query

我正在使用 WHERE 子句从我的查询结果中排除某些记录。

where pv_table.docindex1 IS NULL AND
  pv_table.docindex2 IS NULL AND
  (data_file.vendornumber NOT IN (00550, 00510)
   OR data_file.invoicenumber NOT LIKE 'REB0000%')

WHERE 子句成功消除了 file.vendornumber 列中值为 00550 和 00510 的记录,但它仍然包括 [=14] 中以 'REB0000%' 开头的记录=]查询结果中的列。

我使用 NOT LIKE 的操作顺序或语法有问题吗?

您在条件中使用 OR,这就是为什么您的记录以 'REB0000%':

开头的原因
data_file.vendornumber not in (00550, 00510) OR data_file.invoicenumber not like 'REB0000%'

如果你想排除它你需要使用 AND 而不是

当使用具有多个排除条件的WHERE NOT时,您需要使用AND,而不是OR

示例

ColumnA
1
2
3
4
5

select ColumnA
from MyTable
where ColumnA = 1
or ColumnA = 5

如果我用 where ColumnA <> 1 or ColumnA <> 5 反转它,那么 1 <> 55 <> 1,所以两者都会出现在结果中。

所以当我们用where not做一个声明时,我们使用AND来列出我们想要排除的东西

使用'AND'代替'OR'

where pv_table.docindex1 IS NULL and pv_table.docindex2 IS NULL and 
  (data_file.vendornumber not in (00550, 00510) AND data_file.invoicenumber not like 'REB0000%')

我认为您混淆了 AND 和 OR。

我在想你是什么:

  1. vendornumber 不在此集合中 AND
  2. 发票编号不是这样的

有两种方法可以做到这一点

  1. 按照其他多人的建议,将您的 OR 更改为 AND
  2. 修改你的where子句如下:

    在哪里 pv_table.docindex1 为空并且 pv_table.docindex2 为空并且 不是 ( data_file.vendornumber 在 (00550, 00510) 或 data_file.invoicenumber 喜欢 'REB0000%' )

布尔代数表示 (NOT a AND NOT b) = NOT(a OR B)。我的两个建议都应该给你相同的结果。哪一个更容易阅读...值得商榷。