例如,我有一个字符串中的值列表:
'a'、'c'、'b'、'd'
从数据表中,我得到了如下列结果:
Result
'a'
'b'
如何编写一个将返回不在表中的值的sql:'c','d'
或者
NewResult
'c'
'd'
?
如果可以使用除sql之外的其他简单工具也可以。我只需要结果。谢谢!
例如,我有一个字符串中的值列表:
'a'、'c'、'b'、'd'
从数据表中,我得到了如下列结果:
Result
'a'
'b'
如何编写一个将返回不在表中的值的sql:'c','d'
或者
NewResult
'c'
'd'
?
如果可以使用除sql之外的其他简单工具也可以。我只需要结果。谢谢!
第 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”查询可以采用多种形式。)
这将返回第一组(您的临时表)中未在第二组中找到的所有内容。
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
在查询中使用该not in
子句。
select myCol from myTable where myCol not in ('c','d')
select myCol from myTable where myCol not in (select myCol from otherTable)