如何查找存储在不在sql数据表中的字符串中的值

时间:2013-05-03 15:52:06

标签: sql sql-server

例如,我在字符串中有一个值列表:

'a','c','b','d'

从数据表中,我得到了一个列结果,如:

Result
'a'
'b'

如何编写一个sql,它将返回不在表中的值: 'c','d'

NewResult
'c'
'd'

如果可以使用除sql之外的其他简单工具,也可以。我只需要结果。谢谢!

3 个答案:

答案 0 :(得分:2)

步骤1:将搜索值加载到临时表中。

DECLARE @Search table (SearchFor char(1)  not null)

INSERT @Search values ('a'), ('b'), ('c'), ('d')

(有很多方法可以设置它,这只是输入最快的方法)

运行如下查询:

SELECT SearchFor
 from @Search
except select SearchIn
 from DataTable

(同样,有很多形式“在一个不在b中”的查询可以采取。)

这将返回第一组(你的临时表)中第二组中也找不到的所有内容。

答案 1 :(得分:2)

Create FUNCTION F_SplitAsTable 
(
@txt varchar(max)
)
RETURNS 
@tab TABLE 
(
 ID Varchar(2000)
)
AS
BEGIN
    declare @i int
    declare @s varchar(2000)
    Set @i = CHARINDEX(',',@txt)
    While @i>1
        begin
          set @s = LEFT(@txt,@i-1)
          insert into @tab (id) values (@s)
          Set @txt=RIGHT(@txt,Len(@txt)-@i)
          Set @i = CHARINDEX(',',@txt)
        end
    insert into @tab (id) values (@txt) 
    RETURN 
END
GO

Declare @a table (Ch varchar(10))
insert into @a Values ('a')
insert into @a Values ('b')


Select s.* from dbo.F_SplitAsTable('a,b,c,d') s
left join @a a on a.Ch=s.ID
where a.Ch is NULL

答案 2 :(得分:1)

在查询中使用not in子句。

select myCol from myTable where myCol not in ('c','d')
select myCol from myTable where myCol not in (select myCol from otherTable)