如果我有一个项目列表,请说
apples
pairs
pomegranites
我希望识别SQL DB表中'fruit'列中不存在的任何内容。
我可以想办法做几件事,以为我会把它扔出去看看你们的想法。
答案 0 :(得分:12)
由于您选择的水果列表可以任意长,我建议如下:
create table FruitList (FruitName char(30))
insert into FruitList values ('apples'), ('pears'), ('oranges')
select * from FruitList left outer join AllFruits on AllFruits.fruit = FruitList.FruitName
where AllFruits.fruit is null
左外连接应该比“不在”或其他类型的查询快得多。
答案 1 :(得分:3)
将搜索列表变成一个看起来像'| fruit1 | fruit2 | ...... fruitn |'的字符串并使你的where子句:
where
@FruitListString not like '%|' + fruit + '|%'
或者,将上述字符串解析为临时表或表变量并执行where not in (select fruit from temptable)
。根据您要搜索的项目数量和搜索的项目数量,此方法可能会更快。
答案 2 :(得分:1)
if exists(select top 1 name from fruit where name in ('apples', 'pairs', 'pomegranates'))
PRINT 'one exists'