SQLデータベース列にアイテムのリストが存在することを確認する最良の方法は?
質問
アイテムのリストがある場合は言ってください
apples
pairs
pomegranites
そして、SQL DBテーブルの 'fruit'列に存在しないものを特定したい。
- 高速パフォーマンスが主な関心事です。
- 異なる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
左外部結合は、「not in」よりもはるかに高速である必要があります。または他の種類のクエリ。
他のヒント
検索リストを「| fruit1 | fruit2 | ... fruitn |」のような文字列にしますwhere句を作成します。
where
@FruitListString not like '%|' + fruit + '|%'
または、前述の文字列を一時テーブルまたはテーブル変数に解析し、内ではない場所で(temptableからフルーツを選択)
実行します。検索するアイテムの数と検索されるアイテムの数によっては、この方法の方が高速になる場合があります。
if exists(select top 1 name from fruit where name in ('apples', 'pairs', 'pomegranates'))
PRINT 'one exists'
所属していません StackOverflow