2

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

'a'、'c'、'b'、'd'

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

Result
'a'
'b'

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

或者

NewResult
'c'
'd'

?

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

4

3 回答 3

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

(同样,“in a not in b”查询可以采用多种形式。)

这将返回第一组(您的临时表)中未在第二组中找到的所有内容。

于 2013-05-03T16:04:29.910 回答
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
于 2013-05-03T16:07:33.017 回答
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)
于 2013-05-03T15:54:57.177 回答