SQLデータベース列にアイテムのリストが存在することを確認する最良の方法は?

StackOverflow https://stackoverflow.com/questions/440615

  •  22-07-2019
  •  | 
  •  

質問

アイテムのリストがある場合は言ってください

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'
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top