我正在使用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的记录,但仍包括了file.invoicenumber
列中以'REB0000%'开头的记录。查询结果。
我的操作顺序或使用NOT LIKE
的语法是否有问题?
答案 0 :(得分:2)
在具有多个排除条件的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 <> 5
和5 <> 1
都会出现在结果中。
因此,当我们使用where not
进行声明时,我们使用AND
列出要排除的内容
答案 1 :(得分:1)
在条件中使用 OR ,这就是为什么您有以'REB0000%'开头的记录的原因:
data_file.vendornumber not in (00550, 00510) OR data_file.invoicenumber not like 'REB0000%'
如果要排除它,则需要使用 AND 代替
答案 2 :(得分:1)
使用“ 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%')
答案 3 :(得分:0)
我认为您混淆了AND和OR。
我在想你是什么:
有两种方法可以做到这一点
如下修改您的where子句:
其中 pv_table.docindex1为NULL和 pv_table.docindex2为NULL和 不( (00550,00510)中的data_file.vendornumber或 data_file.invoicenumber,例如“ REB0000%” )
布尔代数说(NO a AND NOT b)= NOT(a OR B)。我的两个建议都应该给您相同的结果。哪一个更容易阅读...值得商。