如果我有物品清单,请说
apples
pairs
pomegranites
并且我想识别 SQL DB 表的“水果”列中不存在的任何内容。
- 快速性能是主要问题。
- 需要可移植到不同的 SQL 实现。
- 输入列表可以包含任意数量的条目。
我可以想到几种方法来做到这一点,我想我会把它扔在那里,看看你们的想法。
由于您选择的水果列表可以任意长,我建议如下:
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
左外连接应该比“不在”或其他类型的查询快得多。
将搜索列表变成一个类似于 '|fruit1|fruit2|...fruitn|' 的字符串 并制作你的 where 子句:
where
@FruitListString not like '%|' + fruit + '|%'
或者,将上述字符串解析为临时表或表变量,然后执行where not in (select fruit from temptable)
. 根据您正在搜索的项目数和正在搜索的项目数,此方法可能会更快。
if exists(select top 1 name from fruit where name in ('apples', 'pairs', 'pomegranates'))
PRINT 'one exists'