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 <> 5
和 5 <> 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。
我在想你是什么:
- vendornumber 不在此集合中 AND
- 发票编号不是这样的
有两种方法可以做到这一点
- 按照其他多人的建议,将您的 OR 更改为 AND
修改你的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)。我的两个建议都应该给你相同的结果。哪一个更容易阅读...值得商榷。
我正在使用 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 <> 5
和 5 <> 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。
我在想你是什么:
- vendornumber 不在此集合中 AND
- 发票编号不是这样的
有两种方法可以做到这一点
- 按照其他多人的建议,将您的 OR 更改为 AND
修改你的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)。我的两个建议都应该给你相同的结果。哪一个更容易阅读...值得商榷。