检查SQL数据库列中是否存在项列表的最佳方法是什么?

时间:2009-01-13 20:16:18

标签: sql list exists

如果我有一个项目列表,请说

apples
pairs
pomegranites

我希望识别SQL DB表中'fruit'列中不存在的任何内容。

  • 快速表现是主要关注点。
  • 需要在不同的SQL实现上可移植。
  • 输入列表可以包含任意数量的条目。

我可以想办法做几件事,以为我会把它扔出去看看你们的想法。

3 个答案:

答案 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'