我知道我们可以使用LIKE进行模式匹配,但是,这是我们想做的事情。
我有一个表,其中有一个列'Pattern',值类似于:
host1%
%host2
....
我有另一张表,其中有一列“主机”。问题是:如何检查“主机”表中的值是否与“模式”中的任何模式都不匹配?
如果它过于复杂,那么一个简单的问题是:如何检查“主机”中的值是否与“模式”中的任何字符串不一致?
我们可以使用循环,但有更好的方法吗?理想情况下,它应该适用于ql server 2008,但最新版本可以。
感谢
答案 0 :(得分:2)
使用where not exists
后跟子查询,该子查询根据包含数据的表的当前行检查每个模式。即。
where not exists
(
select top 1 1
from @patterns p
where d.datum like p.pattern
)
工作示例的完整代码:SQL Fiddle
declare @patterns table
(
pattern nvarchar(16) not null
)
declare @data table
(
datum nvarchar(16) not null
)
insert @patterns
values ('host1%')
,('%host2')
insert @data
values ('host1234')
, ('234host1')
, ('host2345')
, ('345host2')
select *
from @data d
where not exists
(
select top 1 1
from @patterns p
where d.datum like p.pattern
)
答案 1 :(得分:1)
select t1.host
from table_1 t1
left join table_2 t2 on t1.host like t2.pattern
where t2.pattern is null