2016-11-30 3 views
0

У меня здесь интересное затруднение.Выбор из диапазона на основе критериев множественного диапазона

Предположим, у меня есть список чисел следующим образом: 2, 4, 9. Назовем их foo.

Теперь представьте, у меня есть следующие данные:

| Id | ForeignKey | RangeStart | RangeEnd | 
|----|------------|------------|----------| 
| 1 | 1   | 1   | 3  | 
| 2 | 1   | 4   | 5  | 
| 3 | 1   | 6   | 9  | 
| 4 | 2   | 1   | 2  | 
| 5 | 2   | 3   | 3  | 
| 6 | 2   | 4   | 9  | 
| 7 | 3   | 1   | 5  | 
| 8 | 3   | 6   | 9  | 

Мне нужно найти все строки, где любой из пунктов от foo падения между RangeStart и RangeEnd. В этом примере Row Id 5 не будет включен в результирующий набор, но все остальные строки будут.

Это довольно простая проблема для решения в моем контроллере (просто отфильтруйте результаты в цикле), но мне интересно, нет ли на этой основе решения, основанного на множестве.

+0

вы передать * список * в запросе? –

+0

Да, мы на самом деле используем Dapper, поэтому он интерполируется как список чисел, однако мы можем передать его в любом случае нам нужно. Хитрость заключается в том, что список передаваемых чисел сколь угодно длинный (и необязательный), поэтому мы не можем просто сделать их разными параметрами. – Locke

ответ

2

SQL DEMO

SELECT DISTINCT Table1.* 
FROM table1 
JOIN foo 
    ON foo.value between `RangeStart` and `RangeEnd` 

enter image description here ВЫВОД

+0

Я не думаю, что foo - это таблица, основанная на объяснениях OP. –

+0

Это не так. Хотя я полагаю, что это могло бы быть в случае необходимости ... – Locke

+0

@vkp OP сказать '' однако мы можем передать его, в любом случае нам нужно. "' –

0
select * 
from MyTable t 
where exists (select null from foo f where f.val between t.RangeStart and t.RangeEnd) 
Смежные вопросы