2016-11-30 18 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  | 

私はRangeStartRangeEndの間でfoo秋からのアイテムのいずれかの任意の行を見つける必要があります。この例では、行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 OUTPUT

+0

私はfooがOPの説明に基づくテーブルだとは思わない。 –

+0

そうではありません。しかし、必要ならばそれが可能なのではないかと思うが... – Locke

+0

@vkp OP say「とにかく私たちは必要としているが、それを渡すことができる」と言っている。 " –

0
select * 
from MyTable t 
where exists (select null from foo f where f.val between t.RangeStart and t.RangeEnd) 
関連する問題