7

如果我有物品清单,请说

apples
pairs
pomegranites

并且我想识别 SQL DB 表的“水果”列中不存在的任何内容。

  • 快速性能是主要问题。
  • 需要可移植到不同的 SQL 实现。
  • 输入列表可以包含任意数量的条目。

我可以想到几种方法来做到这一点,我想我会把它扔在那里,看看你们的想法。

4

3 回答 3

13

由于您选择的水果列表可以任意长,我建议如下:

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

左外连接应该比“不在”或其他类型的查询快得多。

于 2009-01-13T20:30:32.847 回答
3

将搜索列表变成一个类似于 '|fruit1|fruit2|...fruitn|' 的字符串 并制作你的 where 子句:

where
  @FruitListString not like '%|' + fruit + '|%'

或者,将上述字符串解析为临时表或表变量,然后执行where not in (select fruit from temptable). 根据您正在搜索的项目数和正在搜索的项目数,此方法可能会更快。

于 2009-01-13T20:24:03.500 回答
2
if exists(select top 1 name from fruit where name in ('apples', 'pairs', 'pomegranates'))
  PRINT 'one exists'
于 2009-01-13T20:21:11.540 回答