从另一个表中选择Range之间的记录

Pra*_*mar 6 sql sql-server sql-server-2008

说Table1和我有两张桌子Table2

表格1

???????????
? ID ? RN ?
???????????
? 11 ? 1  ?
? 12 ? 2  ?
? 13 ? 3  ?
? 14 ? 4  ?
? 15 ? 5  ?
? 16 ? 6  ?
? 17 ? 7  ?
? 18 ? 8  ?
? 19 ? 9  ?
? 10 ? 10 ?
???????????
Run Code Online (Sandbox Code Playgroud)

表2

??????????????????????
? ID ? FromRN ? ToRN ?
??????????????????????
?  1 ?    1   ?  3   ?
?  2 ?    6   ?  8   ?  
?  3 ?    10  ?  10  ?
??????????????????????
Run Code Online (Sandbox Code Playgroud)

我希望所有这些记录来自Table1其RN谎言之间的任何范围之间FromRN,并ToRN在Table2

所以我的预期输出是:

???????????
? ID ? RN ?
???????????
? 11 ? 1  ?
? 12 ? 2  ?
? 13 ? 3  ?
? 16 ? 6  ?
? 17 ? 7  ?
? 18 ? 8  ?
? 10 ? 10 ?
???????????
Run Code Online (Sandbox Code Playgroud)

可以在这里找到创建模式的SQLFiddle:

http://sqlfiddle.com/#!3/90d50

Tim*_*sen 11

你可以做一个INNER JOIN两个表中筛选出那些记录Table1其RN值不属于任何范围在Table2:

SELECT t1.ID, t1.RN
FROM Table1 t1
INNER JOIN Table2 t2
    ON t1.RN >= t2.FromRN AND t1.RN <= t2.ToRN
Run Code Online (Sandbox Code Playgroud)

请点击以下链接查看正在运行的演示(由OP提供):

SQLFiddle


Car*_*rra 5

你可以试试这个:

select t1.Id, t1.RN
from table1 t1
inner join table2 t2
on t1.Rn between t2.FromRn and t2.ToRn
Run Code Online (Sandbox Code Playgroud)