不喜欢无法在查询中排除结果SQL

时间:2018-08-30 13:55:25

标签: sql sql-like

我正在使用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的语法是否有问题?

4 个答案:

答案 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 <> 55 <> 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。

我在想你是什么:

  1. 供应商编号不在此集合中,并且
  2. 发票编号不一样

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

  1. 按照其他人的建议,将您的OR更改为AND。
  2. 如下修改您的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)。我的两个建议都应该给您相同的结果。哪一个更容易阅读...值得商