我有一个静态的字符串列表,我想从中确定哪些字符串在特定的表中不存在。此列表包含超过一千个条目,并且在数据库中不存在(我无法对数据库进行更改,我只能对其进行查询)
例如,我的字符串列表可能是("Apple", "Orange", "Banana")
,而我要搜索的表格是:
Id Name 1 Apple 2 Banana
查询结果应为Orange
我可以找到容易存在的那些,但不能做反过来。
答案 0 :(得分:2)
如果希望列表显示在结果中,则需要构建某种类型的表:permanent,temporary或derived。例如:
with list as (
select 'Apple' as name union all select 'Banana' union all select 'Orange'
)
select l.*
from list l
where not exists (select 1 from table t where t.name = l.name);
在网络上,您可以轻松找到split()
功能,该功能可让您编写如下查询:
with list(name) as (
select *
from dbo.split(@ListAsString, ',')
)
select l.*
from list l
where not exists (select 1 from table t where t.name = l.name);
这是另一个想法。我不是真的推荐它,但它可能适用于某些情况:
select @ListAsString = replace(@ListAsString, t.name, '')
from table t;
您可能希望包含适当的分隔符。我们的想法是从字符串中删除元素。最后,您最终获得了不匹配名称的值。但它是一个字符串,而不是表格。
答案 1 :(得分:1)
DECLARE @tbl TABLE( Id INT, Name VARCHAR(20))
INSERT @tbl
SELECT 1, 'Apple' UNION ALL
SELECT 2, 'Banana'
使用NOT IN
SELECT Name FROM
(SELECT 'Apple' Name UNION ALL
SELECT 'Banana' UNION ALL
SELECT 'Orange') t
WHERE Name NOT IN (SELECT Name FROM @tbl)
答案 2 :(得分:0)
select name from sometable
where not exists (select 'Apple' union select 'Banana' union select 'Orange')
这是你想要做的吗?