أفضل طريقة للتأكد من أن قائمة العناصر الموجودة في قاعدة بيانات SQL عمود ؟
سؤال
إذا كان لدي قائمة من البنود ، ويقول
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'
لا تنتمي إلى StackOverflow