从基于多个范围标准的范围中进行选择

时间:2016-11-30 22:14:40

标签: sql

我在这里有一个有趣的窘境。

想象一下,我有一个数字列表如下: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中任何项目落在RangeStartRangeEnd之间的任何行。在此示例中,行Id 5不会包含在结果集中,但所有其他行都将包含在内。

在我的控制器中解决这个问题很简单(只是在循环中过滤掉结果),但我想知道是否没有针对此问题的基于集合的解决方案。

2 个答案:

答案 0 :(得分:2)

<强> SQL DEMO

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

enter image description here输出

答案 1 :(得分:0)

select  * 
from    MyTable t
where   exists (select null from foo f where f.val between t.RangeStart and t.RangeEnd)