Лучший способ проверить, существует ли список элементов в столбце базы данных SQL? - PullRequest
6 голосов
/ 13 января 2009

Если у меня есть список предметов, скажем

apples
pairs
pomegranites

и я хочу идентифицировать все, что не существует, в столбце 'fruit' в таблице БД SQL.

  • Быстродействие - главная проблема.
  • Требуется переносимость между различными реализациями SQL.
  • Список ввода может содержать произвольное количество записей.

Я могу придумать несколько способов сделать это, подумал, что я брошу это туда и посмотрю, что вы, ребята, думаете.

Ответы [ 3 ]

12 голосов
/ 13 января 2009

Поскольку список фруктов, которые вы выбираете, может быть произвольно длинным, я бы предложил следующее:

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

Левое внешнее соединение должно быть намного быстрее, чем «не в» или других видах запросов.

3 голосов
/ 13 января 2009

Сделать список поиска строкой, похожей на '| fruit1 | fruit2 | ... fruitn |' и сделайте свое предложение where:

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

Или проанализируйте вышеупомянутую строку во временной таблице или табличной переменной и выполните where not in (select fruit from temptable). В зависимости от количества искомых элементов и количества искомых элементов этот метод может быть быстрее.

1 голос
/ 13 января 2009
if exists(select top 1 name from fruit where name in ('apples', 'pairs', 'pomegranates'))
  PRINT 'one exists'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...