select
count(distinct [PROV_CT])
from
[HRecent]
where
[PROV_CT] not like ('%P125, %P961, %P160, %P960, %P220, %P004')
我可以写这样的查询吗?实际上它显示的输出与查询输出不同。
select
count(distinct [PROV_CT])
from
[HRecent]
where
[PROV_CT] not like '%P125' and
[PROV_CT] not like '%P220' and
[PROV_CT] not like '%P960' and
[PROV_CT] not like '%P004' and
[PROV_CT] not like '%P961' and
[PROV_CT] not like '%P160'
有人可以帮帮我吗?我想写一个优化的查询。
答案 0 :(得分:0)
您不能使用单个字符串文字来编写查询,如:
[PROV_CT] not like ('%P125, %P961, %P160, %P960, %P220, %P004')
此谓词不会查找单独的值,例如'%P125'
,'%P961'
等。
如果你有一个非常大的列表,要对其执行NOT LIKE
操作,那么这样做可能更简单:
select
count(distinct [PROV_CT])
from
[HRecent]
cross apply (
select count(*)
from (values ('%P125'), ('%P961'),
('%P160'), ('%P960'),
('%P220'), ('%P004') ) AS t(v)
where [PROV_CT] LIKE t.v) AS x(cnt)
where x.cnt = 0
使用VALUES
表值构造函数,您可以创建一个内联表,其中包含要与[PROV_CTRCT]
列进行比较的所有值。然后使用单 LIKE
操作查询此表,以查找是否匹配。