例如,我在字符串中有一个值列表:
'a','c','b','d'
从数据表中,我得到了一个列结果,如:
Result
'a'
'b'
如何编写一个sql,它将返回不在表中的值: 'c','d'
或
NewResult
'c'
'd'
如果可以使用除sql之外的其他简单工具,也可以。我只需要结果。谢谢!
答案 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)