أفضل طريقة للتأكد من أن قائمة العناصر الموجودة في قاعدة بيانات SQL عمود ؟

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

  •  22-07-2019
  •  | 
  •  

سؤال

إذا كان لدي قائمة من البنود ، ويقول

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

يجب أن تكون الصلة الخارجية اليسرى أسرع بكثير من الاستعلامات "ليست في" أو أنواع الاستعلامات الأخرى.

نصائح أخرى

جعل قائمة البحث في سلسلة يبدو '|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'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top