我在这里有一个有趣的窘境。
想象一下,我有一个数字列表如下: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
之间的任何行。在此示例中,行Id 5不会包含在结果集中,但所有其他行都将包含在内。
在我的控制器中解决这个问题很简单(只是在循环中过滤掉结果),但我想知道是否没有针对此问题的基于集合的解决方案。
答案 0 :(得分:2)
<强> SQL DEMO 强>
SELECT DISTINCT Table1.*
FROM table1
JOIN foo
ON foo.value between `RangeStart` and `RangeEnd`
答案 1 :(得分:0)
select *
from MyTable t
where exists (select null from foo f where f.val between t.RangeStart and t.RangeEnd)