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

检查SQL数据库列中是否存在项列表的最佳方法?,sql,list,exists,Sql,List,Exists,如果我有一个项目列表,比如 apples pairs pomegranites 我想识别SQL DB表中“fruit”列中不存在的任何内容 快速性能是主要关注点。 需要在不同的SQL实现上可移植。 输入列表可以包含任意数量的条目。 我可以想出一些方法,我想我会把它扔出去,看看大家怎么想。将搜索列表制作成一个类似“|fruit1 | fruit2 | |……fruitn |”的字符串,并生成where子句: if exists(select top 1 name from fruit where

如果我有一个项目列表,比如

apples
pairs
pomegranites
我想识别SQL DB表中“fruit”列中不存在的任何内容

快速性能是主要关注点。 需要在不同的SQL实现上可移植。 输入列表可以包含任意数量的条目。
我可以想出一些方法,我想我会把它扔出去,看看大家怎么想。

将搜索列表制作成一个类似“|fruit1 | fruit2 | |……fruitn |”的字符串,并生成where子句:

if exists(select top 1 name from fruit where name in ('apples', 'pairs', 'pomegranates'))
  PRINT 'one exists'
where
  @FruitListString not like '%|' + fruit + '|%'

或者,将前面提到的字符串解析为临时表或表变量,并在select FROUT from TENTABLE中执行where not。根据您正在搜索的项目数和正在搜索的项目数,此方法可能会更快。

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

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但FWIW您需要将每个元组分别括起来:值“苹果”、“梨”、“橙子”…谢谢@Bill。我不太使用值,应该先检查我的引用。修正了,可能是最好的选择。如果不想创建表,你可以创建一个表变量来做同样的事情,当你的查询结束时,它将被销毁。当values子句一次只允许你做一个时,你可以偷偷地插入一堆测试记录insert mytablefield select“apples”union all select“Pears”union all select“ORANES”+1用于创新的Joel Spolsky解决方案