アイテムのリストがある場合は、
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
左外部結合は、「notin」または他の種類のクエリよりもはるかに高速である必要があります。
検索リストを「|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'