匹配表中的任何模式?

时间:2015-08-08 18:17:30

标签: sql-server sql-server-2008 stored-procedures

我知道我们可以使用LIKE进行模式匹配,但是,这是我们想做的事情。

我有一个表,其中有一个列'Pattern',值类似于:

host1%
%host2
....

我有另一张表,其中有一列“主机”。问题是:如何检查“主机”表中的值是否与“模式”中的任何模式都不匹配?

如果它过于复杂,那么一个简单的问题是:如何检查“主机”中的值是否与“模式”中的任何字符串不一致?

我们可以使用循环,但有更好的方法吗?理想情况下,它应该适用于ql server 2008,但最新版本可以。

感谢

2 个答案:

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